Pythonic循环——如何在遍历列表时获取多个元素
我想遍历我的列表,并对多个元素进行操作,而不仅仅是一个元素。我想拿第一个元素和它后面的几个元素(这些元素可以是连续的,或者可能是返回的那个元素的第三个元素)。
l = ['a', 'b', 'c', 'd', 'e']
for items in l:
print items[:3]
输出应该是:
['a', 'b', 'c'], ['b', 'c', 'd'], ['c', 'd', 'e']
有很多好的答案,如果我想跳过一些元素呢?比如,获取一个元素,跳过下一个元素,然后获取第三个元素?
输出:
('a', 'c'), ('b','d'), ('c', 'e')
我想,使用enumerate是处理这个问题的最好方法?
遍历列表是如此简单而优雅,我希望类似的语法能让你在for循环中直接使用元素,而不需要使用range或enumerate。
l = ['a', 'b', 'c', 'd', 'e']
for items in l:
print (items[0], items[2])
(是的,我知道如果原始列表是一个包含列表的列表,代码会给出不同的结果。[ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] 会返回 [1, 3], [4, 6], [7, 9])
7 个回答
4
你可以使用zip和切片来实现:
l = range(5)
for grp in zip(*[l[i:] for i in range(3)]):
print grp
(0, 1, 2)
(1, 2, 3)
(2, 3, 4)
经过修改,现在可以正常工作,并且可以用一个数字来表示分组的长度。 :)
这里的意思是调用了 zip(l[0:], l[1:], l[2:])
,因为*号可以把一个列表拆分成多个单独的参数,方便函数调用。
4
如果你想获取子序列中的第一个和第三个元素,使用zip可能是最简单的方法:
l = range(10)
for grp in zip(l[0:], l[2:]):
print grp
(0, 2)
(1, 3)
(2, 4)
...
或者,如果你想跳得更远一些,可以使用step:
for grp in zip(l[0::3], l[2::3]):
print grp
(0, 2)
(3, 5)
(6, 8)
3
l = ['a', 'b', 'c', 'd', 'e']
subarraysize = 3
for i in range(len(l)-subarraysize+1):
print l[i:i+subarraysize]
输出:
['a', 'b', 'c']
['b', 'c', 'd']
['c', 'd', 'e']
我知道这不是很符合Python的风格,但它确实能正常工作。