仅当i <j

时间:2017-03-13 14:07:37

标签: python python-2.7 list

=“”

例如,如果a=[1,2,3,4,5],则将列表元素列表[i]和列表[j]相乘的代码,我希望1乘以所有其他元素,2乘以3,4,5,依此类推。我希望将乘法产品附加到最终输出的列表中。

我编写了以下代码,但它不起作用(只提供一个空列表作为输出):

a = [1,2,3,4,5]
b = []

for i in range(5):
    for j in range(5):
        if i<j:
            b[i]=a[i]*a[j]
print(b)

4 个答案:

答案 0 :(得分:3)

如果我在中运行,我会得到:

IndexError: list assignment index out of range

这是因为b是一个空列表,因此b[0](或任何其他b[i])超出了范围。

你的目标可能是:

b = [a[i]*a[j] for i in range(len(a))
               for j in range(i+1,len(a))]

生成:

>>> b
[2, 3, 4, 5, 6, 8, 10, 12, 15, 20]

[1*2, 1*3, 1*4, 1*5, 2*3, 2*4, 2*5, 3*4, 3*5, 4*5]

这里的界限是明确检查,我们只是将range(..)的{​​{1}}设置为从j开始(所以我们只知道每个{{} 1}}将大于i+1)。

另一种选择 - 可能更优雅 - 可能是使用j模块:

i

答案 1 :(得分:1)

使用itertools的另一种解决方案:

import itertools as it

a = [1,2,3,4,5]
b = [el_i * el_j for (i, el_i), (j, el_j) in it.product(enumerate(a), repeat = 2) if i<j]

此外,正如其他人所指出的,您可能希望在您的示例中执行此操作:

a = [1,2,3,4,5]
b = []

for i in range(5):
    for j in range(5):
        if i<j:
            # Use append here as b is initialised as empty list
            b.append(a[i]*a[j])   
print(b)

答案 2 :(得分:0)

这将完成你想要的所有乘法运算。您会注意到我打印结果而不是分配它们,因为您的尝试会重复分配给相同的值。当你找出你真正想要的东西时,你可以解决它。

for j in range(len(a)):
    for i in range(j):
        print a[i]*a[j] ,
    print

答案 3 :(得分:0)

您无法分配不存在的索引。因此,您应该使用list.append方法。