分割列表的一种优雅方法,给定另一个要从中分割的id列表

问题描述 投票:2回答:5

[我正在寻找一种优雅的方法来在python中切片列表l,给定ID为l_ids的列表。例如,代替编写

new_list = [l[i] for i in l_ids] 

写类似(伪代码)的东西:

new_list = l[*l_ids] 

是否有类似的方式来分割列表?

我感觉有人已经问过这个问题,但是我找不到任何参考。

编辑:可以确定所有列表项都属于同一类型吗?

python slice
5个回答
7
投票

您可以像这样使用operator.itemgetter(*items)

operator.itemgetter(*items)

此外,请注意,我将from operator import itemgetter getter = itemgetter(*lst_ids) new_list = list(getter(lst)) 变量重命名为l,因为它不太模糊,也没有lst

您可以使用Python 3解压缩将元组隐式转换为列表,如@JonClements注释:

should be avoided

最后,从Python 3.5开始,您还可以使用扩展解压缩:

*new_list, = getter(lst)

2
投票

我认为导入任何内容都不是特别优雅或Pythonic。

列表理解有效,我看不出不使用它们的原因(或者没有充分的理由导入某些东西来做同样的事情:]]

new_list = [*getter(lst)]

列表理解正在执行以下操作:

>>> x = [3,5,7,0,1,4,2,6]
>>> y = ['a','b','c','d','e','f','g','h']
>>> nList = [y[i] for i in x]
>>> nList
['d', 'f', 'h', 'a', 'b', 'e', 'c', 'g']

对我来说,理解力看起来很蟒蛇,优雅。


1
投票

您可以使用indexes = [3,5,7,0,1,4,2,6] data = ['a','b','c','d','e','f','g','h'] nList = [] for index in indexes: nList += [data[index]]


1
投票

我会选择itemgetter


0
投票

如果所有列表元素都属于同一类型,则可以使用numpy:

© www.soinside.com 2019 - 2024. All rights reserved.