我是編程初學者。我正在嘗試比較兩個串列并將差異保存在第三個串列中。
您如何將不正確的值復制到第三個串列中?
我確信有更有效的編碼方式,但我需要使用我在這里擁有的東西(除非它無法修復)。
mc_answers 是 [A, C, A, A, D] 我試圖將它與用戶輸入的內容進行比較,所以如果 input_list 是 [A, A, A, A, A,],w_answers 將是 [C, D](函式 user_input 已分配給 input_list 以使其更易于使用)。
def wrong_input(input_list, mc_answers):
print()
wrong_answers=[]
for i in range (5):
while input_list[i]!=mc_answers[i]:
wrong_answers.append(input_list[i])
return wrong_answers
和:
def main():
mc_answers=['A', 'C', 'A', 'A', 'D']
display_test()
input_list=user_input()
print(wrong_input(input_list, mc_answers))
def user_input():
user_answers=[]
print()
for i in range (5):
user_answers.append(input('\nAnswer' str(i 1) ': '))
return user_answers
def wrong_input(input_list, mc_answers):
print()
w_answers=[]
for i in range (5):
while input_list[i]!=mc_answers[i]:
w_answers.append(input_list[i])
return w_answers
main()
uj5u.com熱心網友回復:
不要試圖提出自己的演算法來確定兩個串列之間的差異。您可以使用 確定兩個串列之間的差異set。集合是 Python 中的一種內置資料型別,可以使用set()函式(類似于list()函式)或使用{}.
您可以使用該symmetric_difference方法來確定兩個串列之間的差異,或者您可以使用該difference方法來確定一個串列中不存在于另一個串列中的差異。考慮,
list1 = [3, 12, 7, 8]
list2 = [1, 5, 12, 3]
list3 = set(list1).symmetric_difference(list2)
print(list(list3))
這輸出:
[1, 5, 7, 8]
這意味著數字 1、5、7 和 8 在list1和之間并不常見list2。根據您的需要,您可以使用以下difference方法:
list1 = [3, 12, 7, 8]
list2 = [1, 5, 12, 3]
list3 = set(list1).difference(list2)
print(list(list3))
這輸出:
[7, 8]
這意味著 7 和 8 在list1但不在list2. 但是,您需要記住集合的一些后果。例如,如果您將串列轉換為集合,它將洗掉重復項。看到這個:
list1 = [1, 1, 2, 3]
print(set(list1))
哪個輸出:
{1, 2, 3}
有關集合的更好解釋,請參閱this。
編輯
如果你想要的只是一個完成你給我們的例子的函式,那么集合可能不是要走的路,因為你正在處理有重復的串列。range您可以使用該函式找出函式中的內容len。
def wrong_input(input_list, correct_answers):
wrong_answers = []
for i in range(len(correct_answers)):
for j in range(len(input_list)):
# Move to the next item in correct_answers if this is true:
if input_list[j] == correct_answers[i]:
break
# If we hit this condition, then that means that we looped through all of input_list and there were no
# items that were the equal an individual item in correct_answers
if j == len(input_list) - 1:
wrong_answers.append(correct_answers[i])
return wrong_answers
mc_answers = ['A', 'C', 'A', 'A', 'D']
user_answers = ['A', 'A', 'A', 'A', 'A']
print(wrong_input(user_answers, mc_answers))
這輸出:
['C', 'D']
uj5u.com熱心網友回復:
首先,感謝所有幫助過的人。對于任何試圖找到一種更簡單(盡管效率不高)的方法的人:
def wrong_input(input_list, mc_answers): # The two parameters are lists from main() and user_input()
wrong_answers=[]
for i in range(5):
if input_list[i]!=mc_answers[i]:
wrong_answers.append(input_list[i])
return wrong_answers
在@Barmar 指出在這種情況下“while”回圈永遠不會結束后,我將“while”更改為“if”陳述句。
要記住的無關要點(以防有人遇到它們,就像我一樣):
- 比您要比較的串列更大的范圍(即此代碼中的 range(6) 而不是 range(5)。)將導致錯誤“串列索引超出范圍”(此代碼中的兩個串列的 len 為5)
- 我的代碼的第一個版本導致錯誤'函式'物件'不可下標'。@Barmar 指出我在參考函式 user_input (input_list=user_input 而不是 input_list=user_input()) 時省略了括號,這導致了這個錯誤
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/412393.html
標籤:
上一篇:SML函式創建一個從1到n的串列
