【问题标题】:How can i iterate list after it will be out of range超出范围后如何迭代列表
【发布时间】:2020-05-14 15:07:57
【问题描述】:

我怎样才能让元素超出范围,例如这个列表:

[1,2,3,4,5,6,7,8]

我想要做的是从 3 向前获取 12 索引处的元素,所以当我的列表超过它时,因为它只有 8 个元素,它将从乞求等开始,所以我会这样:

4,5,6,7,8,1,2,3,4,5,6,7

答案是 7,因为它们之间的差异是 12。

我试着做一些这样的想法:

alpha = string.ascii_uppercase
key = []
i = 0
while i < 500:
   for d in alpha:
   key.append(d)
   i += 26

简单地用更多元素扩展我的列表(在此示例中是字母列表)。

【问题讨论】:

  • 解释无法理解

标签: python python-3.x list loops


【解决方案1】:

使用模运算符 (%) 环绕:

# either key is a global list or you need to add it as an argument
def get_item_at(index, your_list):
    return your_list[index % len(your_list)]

这将始终返回一个值。示例:

key = [1, 2 ,3]
for i in range(4, 6):
    print(get_item_at(i, key))
    # or use this line here. It is the same as get_item_at
    print(key[i % len(key)])
# Output
# 1 2

【讨论】:

  • 您缺少key 参数。
  • 不要跳上“globals 是邪恶的”火车,这听起来太关键了,但你应该将使用的变量保持在函数的范围内。考虑想在不仅仅是这个特定的list 甚至是一个模块上使用这个函数。一个好的函数应该是模块化的,有自己的作用域,而不必依赖其他函数。除此之外,这是一个很好的解决方案。
  • @Axe319 你是对的。应该避免使用全局变量。无论如何,我想坚持 OP 的代码,所以我使用了他的列表名。
【解决方案2】:

您可以使用dequedeque 是一个可以旋转的集合。

from collections import deque

my_deque = deque([1,2,3,4,5,6,7,8])
# rotate it backwards 3 indexes so that 4 is in position [0] 
my_deque.rotate(-3)

for i in range(12):
    # print index [0] and rotate as you iterate.
    print(my_deque[0])
    my_deque.rotate(-1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多