在Python列表推导中可以访问项的索引吗?

150 投票
4 回答
121267 浏览
提问于 2025-04-17 15:49

考虑以下的Python代码,我用它将list1中索引从1到3的所有项目添加到一个新的list2中:

for ind, obj in enumerate(list1):
    if 4 > ind > 0:
        list2.append(obj)

如果我不能通过enumerate访问索引,你会如何用列表推导式来写这个呢?

类似于:

list2 = [x for x in list1 if 4 > ind > 0]

但是因为我没有ind这个数字,这样做可以吗?

list2 = [x for x in enumerate(list1) if 4 > ind > 0]

4 个回答

14

除非你的实际需求比较复杂,否则你可以直接使用列表切片,就像@wim建议的那样。

>>> list1 = ['zero', 'one', 'two', 'three', 'four', 'five', 'six']
>>> [x for ind, x in enumerate(list1) if 4 > ind > 0]
['one', 'two', 'three']
>>> list1[1:4]
['one', 'two', 'three']

对于更复杂的情况——如果你其实不需要索引的话,使用切片或者islice来遍历会更清晰。

list2 = [x*2 for x in list1[1:4]]

或者

from itertools import islice
list2 = [x*2 for x in islice(list1, 1, 4)]

对于小的切片,可以简单地用 list1[1:4]。如果切片比较大,使用islice可能更好,这样可以避免复制内存。

49

如果你使用 enumerate,你就可以获取到索引值:

list2 = [x for ind, x in enumerate(list1) if 4>ind>0]
270
list2 = [x for ind, x in enumerate(list1) if 4 > ind > 0]

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

撰写回答