将列表中的数字相乘-python列表索引超出范围

时间:2018-08-01 01:57:46

标签: python list

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:列表索引超出范围

我不明白自己做错了-谢谢!

4 个答案:

答案 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):