列表中的数字与列表索引相乘超出范围

2024-06-16 11:34:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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]

索引器错误:列表索引超出范围

我不明白我做错了什么——谢谢!你知道吗


Tags: lenif错误range数字elselistprint
3条回答

我想你是想这么做

numbers = list(range(100,1000))
possnum = list()
for i in numbers:
    numbers.remove(i) 
    for j in numbers:
    possnum.append(i*j)

print (possnum)  

迭代每个元素的方法是错误的,请在每次迭代时检查索引

除非你把所有元素都从你的问题列表中删除,否则{cd2}。他说

为了实现最终目标,您应该利用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)

很明显,i + multby的值大于数组的最大索引。他说

如果需要进一步的证据,请在while循环的顶部打印i + multby的值。你知道吗

相关问题 更多 >