这里的python真正的初学者D:
所以,我有一个清单:
product_list = ['2.99', '3', 1, '0.99', '10', 0, '7.49', '1', 1]
我想做'之间的数字总和。 '并且同时将这些数字对相乘,有点像这样:
total = total + 2.99*3
total = total + 0.99*10
total = total + 7.49*1
为此,我使用了for:
for i in range(len(product_list)):
total = total + float(product_list[i]) * float(product_list[i+1])
print(total)
i+=2
我尝试增加i
以跳过不在'之间放置的列表号码。 '
这给我以下结果:
8.97
11.97
12.96
22.86
22.86
22.86
虽然它应该只给我这个结果:
8.97
18.87
26.36
所以我有点迷失在那里......对我来说,看起来我的i
根本就没有递增,这可以解释一切,但我似乎无法让它增加..任何想法?
答案 0 :(得分:1)
在循环结束时更改i
无效,因为它会立即分配范围内的下一个值...
看起来你试图在3s中迭代列表,所以你可以向range
添加一个步骤3,例如:
total = 0
for i in range(0, len(product_list), 3):
total = total + float(product_list[i]) * float(product_list[i+1])
print(total)
输出:
8.97
18.87
26.36
假设您可以保证3的倍数,那么您可以使用zip:
执行此操作total = 0
i = iter(product_list)
for x,y,_ in zip(i, i, i):
total += float(x)*float(y)
print(total)
会提供相同的结果。
答案 1 :(得分:0)
在您正在构建的循环中,仅在一次迭代中递增i
的值。当前迭代结束时,i值将重置为range()
函数中的值。 (所以你只能在结束之前使用当前迭代中的递增值。)鉴于你在迭代结束之前递增it
,它什么都不做。
您可以使用列表解析来完成您要执行的操作
例如:
range(len(product_list))[::2]
或内置范围功能;
range(0, len(product_list), 2)
这些基本上做的是他们为列表创建步骤值。所以他们产生了这个;
[1, 3, 5, 7] # etc...
答案 2 :(得分:0)
for i in range(x)
表示你在列表[1,2 .. x]
上进行迭代,所以当你在循环中更改i时,它只会针对当前迭代而不是下一个迭代进行更改。
您可以使用for i in range(0, len(product_list), 3)
,其中3d参数为步骤。
答案 3 :(得分:0)
当您使用for ..时,每次都会重置变量的值。 含义:
for i in range(3):
print(i)
i *= 2 # Any edit to i will behave the same
将打印以下内容:
0
1
2
因为i
的值与前一个循环无关。
这与使用for(int i = 0; i < 3; i++
的C(或类似语言)中的循环不同,i
的值增加1,这意味着它依赖于前一个。
如果解释不够清楚,请发表评论。