簡體   English   中英

將列表中的每個第 N 個元素乘以 M

[英]Multiplying every Nth element in a list by M

我有一個問題,我似乎無法弄清楚。 我對 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

您可以嘗試使用切片進行列表理解。

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

使用列表推導式的更優雅的解決方案;)

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

在此處輸入圖片說明

此解決方案基於您的原始解決方案。 一個更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列表。

這對你有用嗎?

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)

因此,經過多次嘗試並從作為程序員的朋友那里得到反饋后,我最終得到了正確的輸出:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM