如何在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中循环列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中创建多个 for 循环列表的递归以获得组合? [复制]

如何在 for 循环中创建键:值对列表? [复制]

如何在python中向后循环? [复制]

python 如何在一个for循环中遍历两个列表

如何使用 Python 转换列表中的多个列表? [复制]

如何循环遍历列表? [复制]