簡體   English   中英

在列表的每個元素上使用 function

[英]Using a function on each element of a list

我有一個列表( decrypted_list ),其中包含我必須解密的四個 integer 元素。 該函數的工作是解密代碼,它的邏輯是正確的。 在定義了 function 之后,我想在 decrypted_list 的每個元素上調用它來decrypted_list它的元素。

encrypted_list = [7, 1, 0, 2]

def decrypter(number):
    for number in encrypted_list:
        if (number + 4) < 10:
            return (number + 4)
        elif (number + 4) > 10:
            return (number + 4) % 10

decrypted_list = [decrypter(x) for x in encrypted_list]

但是,output 不是我所期望的:

預期: [1、5、4、6]
實際: [1, 1, 1, 1]

請幫忙。 我是 Python 的新手::)

decrypter器 function 中循環encrypted_list列表是沒有意義的。 這個 function 應該只看number參數 - 它不需要知道encrypted_list變量。

循環操作本身應該只發生在您的列表理解中( [decrypter(x) for x in encrypted_list] )。

將您的 function 更改為以下內容,您應該沒問題:

def decrypter(number):
  if (number + 4) < 10:
      return (number + 4)
  elif (number + 4) > 10:
      return (number + 4) % 10

您的 function 應如下所示:

def decrypter(number):
    if (number + 4) < 10:
        return (number + 4)
    elif (number + 4) > 10:
        return (number + 4) % 10

您不應該在此處使用 for 循環,因為您將在代碼最后一行的列表的每個元素上使用此 function:

decrypted_list = [decrypter(x) for x in encrypted_list]

正如你所說,function 只解密一個數字,所以它不需要知道整個列表。 encrypted_list不應出現在該 function 中。

添加該 for 循環將導致函數的行為發生變化 - 無論您傳入什么數字,它只會解密數字1 ,因為這是列表的第一項。 for 循環實際上並不遍歷列表,因為它在第一次迭代時就返回了。

其他人已經在您的代碼中指出了問題。 我想指出您的 function 中的冗余。 這將產生相同的 output:decrypted_list decrypted_list = [(x + 4) % 10 for x in encrypted_list] 或者,如果您想擁有 function:

def decrypter(number):
    return (number + 4) % 10

decrypted_list = [decrypter(x) for x in encrypted_list]

因為x % 10 == x如果x < 10

暫無
暫無

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

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