你可以一遍又一遍地遍历列表(使用包含其中一步的范围),直到循环访问列表中的所有元素?
我有以下列表:
result = []
list = ['ba', 'cb', 'dc', 'ed', 'gf', 'jh']
我希望结果(结果)为:
result = ['dc', 'cb', 'ba', 'jh', 'gf', 'ed']
如何让它循环遍历第一个列表,并将每个元素附加到结果列表,从第三个元素开始并使用5作为步骤,直到所有元素都在结果列表中?
答案 0 :(得分:6)
无需多次遍历列表。作为更加pythonic的方式您可以使用itertools.cycle
和islice
:
>>> 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']