python - 列表索引 - 如果太大返回列表的开头
问题描述
所以,也许这个问题听起来很初学者,但我只是不知道我应该如何从这个例子开始:
所以例子是:我有一个列表,例如 13 个项目长 (1,2,3,4...13) 有一个给定的数字,比如说 6
该程序需要在列表中显示我,数字将按什么顺序出现。如果第二个数字是 6,则意味着每次第六个项目都是下一个要掉出来的项目。但我的问题是,我怎么能告诉python如果索引号上升得太高,它应该从一开始就重新开始计数?
到目前为止,这是我自己做的
x = int(input("Number of items (numbers): "))
y = int(input("Fall-out number: "))
#n = 1
#id = 0
numbers = [n for n in range(x+1)]
fallsout = []
numbers.remove(30)
for i in numbers:
if i % y == 0:
fallsout.append(i)
print (numbers)
print (fallsout)
这是输入和输出中应该包含的示例:
输入:x = 13 y = 6
输出:6 12 5 13 8 3 1 11 2 7 4 10 9
解决方案
好的,看起来您想将 numbers 中的每 6 个元素复制到 fallout 中,然后从 numbers 中删除该元素,并以循环方式继续,直到 numbers 为空。
import copy
x = int(input("Number of items (numbers): "))
y = int(input("Fall-out number: "))
# list should start from 1 as by the example
numbers = [n for n in range(1,x+1)]
# deep copy to preserve original list
numbers_copy = copy.deepcopy(numbers)
fallsout = []
count = y
while len(numbers_copy)!=0:
fallsout.append(numbers_copy[count-1])
# remove element
del numbers_copy[count-1]
# handle starting edge
if count == 0:
count = 1
# handle last edge
if numbers_copy != []:
count = (count+y-1)%len(numbers_copy)
print numbers
print fallsout
输出是
Number of items (numbers): 13
Fall-out number: 6
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
[6, 12, 5, 13, 8, 3, 1, 11, 2, 7, 4, 10, 9]
说明:
假设我有一个长度 = 6 的数组 numbers = [1,2,3,4,5,6],并且我正在使用计数器“count”来遍历列表。以便,
numbers[count] = 2(当 count=1 时)
然后查看下一个元素,我会使用数字[count+1]。要跳回到列表的开头,我们使用模运算,
count = (count+number_of_steps)%len(numbers)
例如,在 index=4 并跳转 3 步时,下一个索引将是 (4+3)%6 = 1 现在我们必须从列表中复制每个第 y 个元素,所以我们使用,
fallsout.append(numbers_copy[count-1]) # count-1 as we are counting from 0
然后我们从列表中删除该号码,
del numbers_copy[count-1]
然后我们如上所述按模数向前跳 y 步计数,
count = (count+y-1)%len(numbers_copy) # again -1 as we count from 0
数字的长度需要重新计算,因为列表可能会因删除元素而改变。
推荐阅读
- sql - 如何在 Google Spanner 中查看数据库或表的索引?
- r - R 中的 Swimmerplot,堆叠条之间有“空白”空间(ggplot)
- formula - 如何查看和重新编辑 LibreOffice 或 OpenOffice Writer 文本文档表格中的公式?
- r - 如何在一张图中绘制多个每日时间序列
- php - 如何进行下一步登录
- javascript - 使用 JQuery 在 JavaScript 中生成 1 - 100 之间的数字
- c# - 通过 PInvoke 在单独的线程上调用 C# 回调
- java - 如何在循环中增加变量以将对象移动一定数量的点并旋转到新方向
- c# - UNITY - UnauthorizedAccessException:访问路径被拒绝
- typescript - TypeScript:无法在子类上调用超级方法