在python中将列表中的数字相乘

时间:2018-02-03 14:51:17

标签: python list

我需要一个循环来乘以列表的一部分。我将每个第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)

它不断返回错误的输出,我已经尝试了所有我能想到的解决方法,但它仍然无法正常工作。

4 个答案:

答案 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我猜你得到的第二个MN混淆了。什么是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))