[我正在寻找一种优雅的方法来在python中切片列表l
,给定ID为l_ids
的列表。例如,代替编写
new_list = [l[i] for i in l_ids]
写类似(伪代码)的东西:
new_list = l[*l_ids]
是否有类似的方式来分割列表?
我感觉有人已经问过这个问题,但是我找不到任何参考。
编辑:可以确定所有列表项都属于同一类型吗?
您可以像这样使用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)
我认为导入任何内容都不是特别优雅或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']
对我来说,理解力看起来很蟒蛇,优雅。
您可以使用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]]
我会选择itemgetter
如果所有列表元素都属于同一类型,则可以使用numpy: