如何在python中循环列表?

时间:2018-06-10 12:08:19

标签: python python-3.x

假设我从以下列表[a,b,c]开始,并且我从此列表中想要创建以下列表[[a,b,c], [c,a,b], [b,c,a]],其中包含原始列表的所有周期。我怎样才能以最有效的方式做到这一点?

2 个答案:

答案 0 :(得分:5)

list comprehension或者您想要一些特别的东西?

lst = ['a','b','c']

n_lst = [lst[x:] + lst[:x] for x in range(len(lst))]
print(n_lst)

<强>输出

[['a', 'b', 'c'], ['b', 'c', 'a'], ['c', 'a', 'b']]

所有peremutations特别的东西

import itertools
list(itertools.permutations(lst))

<强>输出

[
  ('a', 'b', 'c'), 
  ('a', 'c', 'b'), 
  ('b', 'a', 'c'), 
  ('b', 'c', 'a'), 
  ('c', 'a', 'b'), 
  ('c', 'b', 'a')
]

此外,我还检查了来自@jpp answer的list comprehension对象执行rotate和内置函数collections.deque的时间。

lst = list(range(10000))

# list comprehension time
1.923051118850708

# rotate from collections.deque time
1.6390318870544434

rotate更快

答案 1 :(得分:3)

使用collections.deque及其方法rotate

from collections import deque

A = deque(['a', 'b', 'c'])

res = []
for i in range(len(A)):
    A.rotate()
    res.append(list(A))

print(res)

[['c', 'a', 'b'],
 ['b', 'c', 'a'],
 ['a', 'b', 'c']]