【问题标题】:Cycle Through List Items循环浏览列表项
【发布时间】:2016-08-08 00:24:38
【问题描述】:

我有一个项目列表,我想定期“循环”通过,访问第一个(第 0 个)项目,然后将其移到列表的后面。实现这一目标的最佳方法是什么?我想要的语法如下所示。

items = ["Alex", "Bob", "Charlie", "Doug", "Eddie"]

display_next_item(items)
# Alex

display_next_item(items)
# Bob

# ...

display_next_item(items)
# Eddie

display_next_item(items)
# Alex

【问题讨论】:

  • @TessellatingHeckler 我似乎错误地将我的问题和潜在答案分开了。已修复 - 对此感到抱歉。

标签: python list python-3.x optimization


【解决方案1】:

你可以使用itertools.cycle():

from itertools import cycle

L = [10, 20, 30]
cycled_list = cycle(L)

获得 10 件物品:

for x in range(10):
    print(next(cycled_list))

输出:

10
20
30
10
20
30
10
20
30
10

使用next(cycled_list) 获取下一项。

注意itertools.cycle() 会复制您的列表。您可以通过以下方式避免这种情况 编写您自己的循环迭代器函数,该函数仅适用于序列但不适用于迭代器:

def my_cycle(seq):
    while seq:
        for element in seq:
            yield element

cycled_list = my_cycle(L)
for x in range(10):
    print(next(cycled_list))

输出:

10
20
30
10
20
30
10
20
30
10

第二种方法应该是最好的,因为它不会复制 列表中的任何部分。

【讨论】:

    【解决方案2】:

    您可以将.pop().append() 一起使用:

    items = [1, 2, 3, 4, 5]
    item = items.pop(0)
    items.append(item)
    print(item) # 1
    print(items) # [2, 3, 4, 5, 1]
    

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      相关资源
      最近更新 更多