我们如何通过增加索引来将列表的元素相乘?

时间:2019-09-14 09:27:41

标签: python-3.x

Insert ',<#arg#> '

我期望的结果是

b = [3,2,6]
hid = []

#print(b[0] * b[1])
#print(b[1] * b[2])
#print(b[2] * b[3])
for n in range(len(b)):
    print(b[n-1] * b[n])

但是我得到

6, 12

哪里出了错?

4 个答案:

答案 0 :(得分:0)

您的列表仅包含三个元素,因此没有b[3],您要实现的目标(大小为2的乘法组合)可以使用两个嵌套循环来完成:

b = [3, 2, 6]

for i in range(len(b) - 1):
  for j in range(i + 1, len(b)):
    print(b[i] * b[j])

输出:

6
18
12

但是,更Python化的方式是使用itertools.combinations

b = [3, 2, 6]

from itertools import combinations

for x, y in combinations(b, 2):
  print(x * y)

输出:

6
18
12

答案 1 :(得分:0)

范围(len(b)),其值为(0,1,2) 所以 b [n-1] b [-1] ,它是 6 ,所以(6 * 3) = 18 它给出结果

18,  6, 12

尝试这个:

for n in range(len(b)-1):
    print(b[n] * b[n+1])

答案 2 :(得分:0)

for n in range(len(b)):
    print(b[n-1] * b[n])

在第一次迭代中,当n = 0时,您具有:

print(b[n-1] * b[n])

什么意思:

print(b[0-1] * b[0])

b [0-1]将为您提供列表中的最后一个元素,因为您拥有

6*3 = 18

您应该这样做:

b = [3,2,6]
hid = []

for n in range(1,len(b)):
    print(b[n-1] * b[n])
  

range(3)将生成0到2之间的数字(3个数字)。你也可以   将开始,停止和步长定义为范围(开始,停止,步长)。   如果未提供,则步长默认为1。

b = [3,2,6]
hid = []

for n in range(len(b)-1):
    print(b[n] * b[n+1])

输出:

6
12

答案 3 :(得分:0)

在for循环中,迭代从zero

开始
for n in range(len(b)):

print(b[n-1] * b[n])做“ n-1”表示b [-1],它是列表“ 6”的最后一个元素,而b [n]则是b [0]为18。

因此,您的代码将转换为:

print b[-1]*b[0]
print b[0]*b[1]
print b[1]*b[2]

正确的编码方式是:

#!/usr/bin/python

b = [3,2,6]
i = 0
while i < len(b)-1:
    print b[i]*b[i+1]
    i+=1

输出:

6
12