我需要一个循环来乘以列表的一部分。我将每个第N个元素(除了第0个)乘以M.该列表称为数字,乘数为M,循环应该在第N个数字处开始相乘。 这就是我所拥有的:
for i in range(0, len(numbers)):
numbers[i]= int(numbers[i])
for M in range (N, len(numbers)):
if numbers[N] > 0:
numbers.append[N]
if numbers[N] < 0:
total = numbers
print (total)
它不断返回错误的输出,我已经尝试了所有我能想到的解决方法,但它仍然无法正常工作。
答案 0 :(得分:2)
您通常将数字乘以星号(*
)。因此,我们可以将i
- 数字乘以:
numbers[i] *= M
要将除第一个元素之外的每个N
元素相乘,我们可以构造一个范围:
for i in range(N, len(numbers), N):
numbers[i] *= M
range
的最后一个参数是step
,这意味着我们每次都会增加i
,直到达到len(numbers)
答案 1 :(得分:1)
你的代码中存在很多问题和奇怪之处:</ p>
M
作为循环变量,从而覆盖M
中存储的乘数;在第一个循环中更好地使用i
numbers[i] = numbers[i] * M
或仅numbers[i] *= M
> 0
和< 0
检查与您的问题的关系,但您应该检查numbers[i]
而不是numbers[N]
,这封信总是如此相同numbers
列表(而不仅仅是numbers[i]
)分配到total
并打印出来...... 您还可以使用列表推导并将其分配回原始列表的切片:
>>> N, M = 3, 10
>>> numbers = list(range(10))
>>> numbers[N::N] = [x*M for x in numbers[N::N]]
>>> numbers
[0, 1, 2, 30, 4, 5, 60, 7, 8, 90]
答案 2 :(得分:0)
numbers = [int(n) for n in numbers]
这是第一个功能。它被称为list comprehension我猜你得到的第二个M
和N
混淆了。什么是N
无论如何?
答案 3 :(得分:0)
使用map
:
map(lambda (i, el): el*M if i%N==0 else el, enumerate(numbers))
跳过第一个索引:
map(lambda (i, el): el*M if i%N==0 and i>0 else el, enumerate(numbers))