如何在Python中多次遍历列表

时间:2015-09-22 12:44:13

标签: python

你可以一遍又一遍地遍历列表(使用包含其中一步的范围),直到循环访问列表中的所有元素?

我有以下列表:

result = []
list = ['ba', 'cb', 'dc', 'ed', 'gf', 'jh']

我希望结果(结果)为:

result = ['dc', 'cb', 'ba', 'jh', 'gf', 'ed']

如何让它循环遍历第一个列表,并将每个元素附加到结果列表,从第三个元素开始并使用5作为步骤,直到所有元素都在结果列表中?

3 个答案:

答案 0 :(得分:6)

无需多次遍历列表。作为更加pythonic的方式您可以使用itertools.cycleislice

>>> from itertools import cycle,islice
>>> li= ['ba', 'cb', 'dc', 'ed', 'gf', 'jh']
>>> sl=islice(cycle(li),2,None,4)
>>> [next(sl) for _ in range(len(li))]
['dc', 'ba', 'gf', 'dc', 'ba', 'gf']

请注意,在您的预期输出中,步骤为5而不是4.因此,如果您使用5作为切片步骤,您将获得预期的输出:

>>> sl=islice(cycle(li),2,None,5)
>>> [next(sl) for _ in range(len(li))]
['dc', 'cb', 'ba', 'jh', 'gf', 'ed']

答案 1 :(得分:4)

假设列表的步骤和长度是互质的,您可以这样做:

result = []
list = ['ba', 'cb', 'dc', 'ed', 'gf', 'jh']
start = 2
step = 5
end = start + step*len(list)
for i in range(start, end, step):
    result.append(list[i%len(list)])
print result

结果:

['dc', 'cb', 'ba', 'jh', 'gf', 'ed']

答案 2 :(得分:0)

之前发布了一个非常简单的解决方案,不知道为什么删除它:

>>> a = ['ba', 'cb', 'dc', 'ed', 'gf', 'jh']
>>> result = [a[n] for n in range(2, -4, -1)]
>>> result
['dc', 'cb', 'ba', 'jh', 'gf', 'ed']