我有一个问题,我似乎无法弄明白。我是Python的新手,只编写了三个星期。任何帮助表示赞赏。
我们传递了3个输入:
你应该将每个第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
答案 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)]
答案 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)