将列表中的每个第N个元素乘以M

时间:2017-11-20 03:23:01

标签: python list

我有一个问题,我似乎无法弄明白。我是Python的新手,只编写了三个星期。任何帮助表示赞赏。

问题:

我们传递了3个输入:

  • 一个数字列表
  • 乘数值,M
  • 一个值,N
  

你应该将每个第N个元素(不要将第0个元素乘以)乘以M.因此,如果N是3,则从第3个元素开始,即索引2.

     

如果少于N个元素,则应输出未更改的输入列表。

我似乎无法弄清楚这一点。我在这里尝试了很多不同的东西。目前,我有以下内容,根本无法使用。

本发明提供:

import sys
M= int(sys.argv[2])
N= int(sys.argv[3])

numbers= sys.argv[1].split(',')
for i in range(0, len(numbers)):
  numbers[i]= int(numbers[i])

我的代码:

for N in numbers:
    if numbers[i] > 0:
    total = N * M
    print(total)
else:
    print(numbers)

输出:

我甚至不接近输出应该是什么。对此感到失落。这是我的代码。看起来他们想要列表中的输出。

Program Failed for Input: 1,2,3,4,5,6 5 3
Expected Output: [1, 2, 15, 4, 5, 30]
Your Program Output:
5
10
15
20
25
30

6 个答案:

答案 0 :(得分:3)

您可以尝试使用切片进行列表理解。

numbers[N-1::N] = [x * M for x in numbers[N-1::N]]

答案 1 :(得分:2)

使用列表推导的更优雅的解决方案;)

[item*M if (index and not (index+1)%N) else item for index, item in enumerate(items)]

enter image description here

答案 2 :(得分:0)

这对你有用吗?

res = []
for num in numbers:
    if num > 0:
        total = num * M
        res.append(total)

if len(res) != len(numbers):
    print (numbers)
else:
    res.reverse()
    print (res)

答案 3 :(得分:0)

此解决方案基于您的原始解决方案。例如,更加pythonic将使用列表理解,以便将来记住这一点,

output = [numbers[0]]
if len(numbers) >= N:
    for i in range(1,len(numbers)):
        if ((i+1)%N) is 0:
            output.append(numbers[i]*M)
        else:
            output.append(numbers[i]);
else:
    output = numbers

如果N不大于列表大小,程序会构造一个新的数字列表,每个第N个数乘以M.这是通过一个简单的模运算符完成的。 Python中的索引从零开始,i遍历索引值,但是您想要的输出将元素计算为从1开始计算 - 因此模数中为i+1。如果不是每个第N个 - 程序只是附加旧值。如果列表总共短于N,则将整个未更改的列表分配给output列表。

答案 4 :(得分:0)

所以经过多次尝试并从一位作为程序员工作的朋友那里蹦出来之后,我最终得到了这个给了我正确输出的信息:

newlist = []

if len(numbers) < N: 
  newlist = numbers
else: 
  for i in range(0, len(numbers)):
    num = numbers[i]
    if (i+1) % N == 0: 
      newlist.append(num*M)
    else: 
      newlist.append(num)
      i+=1

print(newlist)

答案 5 :(得分:0)

# Input
import sys
M= int(sys.argv[2])
N= int(sys.argv[3])

# convert strings to integers
numbers= sys.argv[1].split(',')
for i in range(0, len(numbers)):
  numbers[i]= int(numbers[i])

# if the length of our list is greater than our supplied value
# loop to multiply(starting at the 3rd position in the list) by M
if len(numbers) > N :
  for num in range(2, len(numbers), 3) :
    numbers[num] = numbers[num] * M
print(numbers)