如何在python中循环列表?

How to cycle list in python?

本问题已经有最佳答案,请猛点这里访问。

假设我从下面的列表[a,b,c]开始,并且我想从这个列表创建下面的列表[[a,b,c], [c,a,b], [b,c,a]],它包含原始列表的所有循环。我怎样才能以最有效的方式做到这一点?


list comprehension还是你想要一些特别的东西?

1
2
3
4
lst = ['a','b','c']

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

产量

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

对所有的突变都是特别的

1
2
import itertools
list(itertools.permutations(lst))

产量

1
2
3
4
5
6
7
8
[
  ('a', 'b', 'c'),
  ('a', 'c', 'b'),
  ('b', 'a', 'c'),
  ('b', 'c', 'a'),
  ('c', 'a', 'b'),
  ('c', 'b', 'a')
]

我还检查了执行list comprehension的时间,以及从@jpp answer执行collections.deque对象的内置函数rotate的时间。

1
2
3
4
5
6
7
lst = list(range(10000))

# list comprehension time
1.923051118850708

# rotate from collections.deque time
1.6390318870544434

旋转更快


采用collections.deque及其方法rotate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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']]