python中列表中的数字相乘

python中列表中的数字相乘,python,list,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: to

我需要一个循环来乘以列表的一部分。我将每个第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)
范围内的i(0,len(数字)):
数字[i]=int(数字[i])
对于范围内的M(N,len(数字)):
如果数字[N]>0:
数字。附加[N]
如果数字[N]<0:
总数=个数
打印(总计)

它总是返回错误的输出,我已经尝试了所有我能想到的方法来修复它,但仍然不起作用。

您通常将数字乘以星号(
*
)。因此,我们可以将第i个数字乘以:

numbers[i] *= M
要将除第一个元素外的第N个元素相乘,我们可以构造一个范围:

for i in range(N, len(numbers), N):
    numbers[i] *= M

范围
的最后一个参数是
步骤
,这意味着我们每次递增
i
,直到到达
len(数字)
通常用星号(
*
)乘以一个数字。因此,我们可以将第i个数字乘以:

numbers[i] *= M
要将除第一个元素外的第N个元素相乘,我们可以构造一个范围:

for i in range(N, len(numbers), N):
    numbers[i] *= M
范围
的最后一个参数是
步骤
,这意味着我们每次都增加
i
,直到达到
len(数字)

这是第一个函数。它被称为a,我想是你把
M
N
搞混了。什么是
N

这是第一个函数。它被称为a,我想是你把
M
N
搞混了。什么是
N

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))
使用
映射

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))

您的代码中有很多问题和奇怪之处:

  • 使用
    M
    作为循环变量,从而覆盖存储在
    M
    中的乘数;最好像在第一个循环中一样使用
    i
  • 您将添加到列表中,而不是使用
    numbers[i]=numbers[i]*M
    或仅使用
    numbers[i]*=M
  • 我看不出
    >0
    <0
    检查与您的问题有什么关系,但您可能应该检查
    数字[I]
    ,而不是
    数字[N]
    ,因为字母总是一样的
  • 此外,我不明白您为什么要将整个
    编号
    列表(而不是仅将
    编号[I]
    分配给
    总计
    并打印它
您还可以使用列表理解并将其分配回原始列表的一部分:

>>> 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]

您的代码中有很多问题和奇怪之处:

  • 使用
    M
    作为循环变量,从而覆盖存储在
    M
    中的乘数;最好像在第一个循环中一样使用
    i
  • 您将添加到列表中,而不是使用
    numbers[i]=numbers[i]*M
    或仅使用
    numbers[i]*=M
  • 我看不出
    >0
    <0
    检查与您的问题有什么关系,但您可能应该检查
    数字[I]
    ,而不是
    数字[N]
    ,因为字母总是一样的
  • 此外,我不明白您为什么要将整个
    编号
    列表(而不是仅将
    编号[I]
    分配给
    总计
    并打印它
您还可以使用列表理解并将其分配回原始列表的一部分:

>>> 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]

.append[N]
?您不调用方括号内的函数。我尝试过它不起作用。但它没有任何意义,您调用圆括号内的函数(即
数字。append(1)
,并且您无论如何都不需要追加)。
.append[N]
?您不使用方括号调用函数。我尝试过它不起作用。但这没有任何意义,您使用圆括号调用函数(即
数字。append(1)
,并且您无论如何都不需要追加)。我认为N是3,M是5我认为N是3,M是5不应该在
范围内(N,len(数字),N)
be
range(N,len(数字)+1,N)
?否则它将丢失最后一个元素?@GarbageCollector:否,因为列表的最后一个索引是
len(列表)-1
。这就是为什么您经常在代码中看到范围内的i(len(列表)),因为这并不排除最后一个元素。
l=[1,2,3,4,5,6,7,8,9,10]
列表(范围(2,len(l),2))
给出
[2,4,6,8]
@GarbageCollector:这确实是预期的输出,因为最后一个索引是
9
,这很奇怪。如果您为范围(2,len(l),2)中的i编写
[l[i]
,您将获得
[3,5,7,9]
。啊,对了!对不起,我把问题中的
N
符号搞糊涂了。范围(N,len(数字),N)不应该是
range(N,len(数字)+1,N)
?否则它会错过最后一个元素吗?@GarbageCollector:不,因为列表的最后一个索引是
len(列表)-1
。这就是为什么您经常在代码中看到i的
(len(thelist))
:因为这并不排除最后一个元素。
l=[1,2,3,4,5,6,7,8,9,10]
列表(range(2,len(l),2))
给出了
[2,4,6,8]
@GarbageCollector:这确实是预期的输出,因为最后一个索引是
9
,这很奇怪。如果您为范围(2,len(l),2)内的i编写
[l[i]
,您将获得
[3,5,7,9]
。啊,对了!很抱歉,您对所讨论的
n
符号有点困惑。