如何在python中循环列表? [复制]
Posted
技术标签:
【中文标题】如何在python中循环列表? [复制]【英文标题】:How to cycle list in python? [duplicate] 【发布时间】:2018-11-19 20:45:55 【问题描述】:假设我从下面的列表[a,b,c]
开始,并且我想从这个列表中创建下面的列表[[a,b,c], [c,a,b], [b,c,a]]
,它包含原始列表的所有循环。我怎样才能以最有效的方式做到这一点?
【问题讨论】:
你试试看? 我可以定义一个旋转列表的函数 `def rotate(l, n): return l[n:] + l[:n]` 但对我来说似乎应该有更多这样做的有效方法。 您只是在寻找列表的排列吗?骑自行车通常指的是别的东西。 【参考方案1】: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']]
对所有排列都有特殊意义
import itertools
list(itertools.permutations(lst))
输出
[
('a', 'b', 'c'),
('a', 'c', 'b'),
('b', 'a', 'c'),
('b', 'c', 'a'),
('c', 'a', 'b'),
('c', 'b', 'a')
]
我还检查了list comprehension
的执行时间和来自@jpp 答案的collections.deque
对象的内置函数rotate
的执行时间。
lst = list(range(10000))
# list comprehension time
1.923051118850708
# rotate from collections.deque time
1.6390318870544434
rotate 更快
【讨论】:
【参考方案2】:使用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']]
【讨论】:
以上是关于如何在python中循环列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章