[英]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.