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