numbers = list(range(100,1000))
possnum = list()
i = 0
multby = 1
while i <= len(numbers):
possible = numbers[i] * numbers[i + multby]
possnum.append(possible)
if multby == 899 - i:
multby = 1
i = i + 1
else:
multby = multby + 1
print(possnum)
我正在尝试使其范围内的所有数字彼此相乘一次。我在这行上一直出错:
possible = numbers[i] * numbers[i + multby]
IndexError:列表索引超出范围
我不明白自己做错了-谢谢!
答案 0 :(得分:1)
我认为您正在尝试这样做
numbers = list(range(100,1000))
possnum = list()
for i in numbers:
numbers.remove(i)
for j in numbers:
possnum.append(i*j)
print (possnum)
您遍历每个元素的方法是错误的,请在每次迭代时检查索引
答案 1 :(得分:0)
问题之一是您使用的是while len(numbers) > 0
,除非您设置numbers = []
或从numbers
列表中删除所有元素,否则情况永远都是如此。
要实现最终目标,您应该利用itertools
模块来枚举列表中的所有组合。
from itertools import combinations_with_replacement
numbers = list(range(100,1000))
possnum = list()
for i, j in combinations_with_replacement(numbers, 2):
possnum.append(i * j)
如果您不想使用itertools
,则遍历列表的标准方法是使用for ... in ...:
构造而不是按索引引用。如果要组合列表中所有项目对,则应使用嵌套循环:
for i in numbers:
for j in numbers:
possnum.append(i * j)
答案 2 :(得分:0)
很显然,i + multby
的值大于数组的最大索引。
如果需要进一步的证据,请在while循环的顶部打印i + multby
的值。
答案 3 :(得分:0)
我在这里发现的一个问题是您正在访问数字[len(numbers)],这是不可能的,因为数字的索引范围仅为0到len(numbers)-1。
如下更改循环条件:
while i<len(numbers):