2016-05-13 15 views
0

我有列出的兩個列表名單。我即將通過迭代他們並在相同位置尋找共同元素。更Python的方式去在名單

如果在 elements_to_check列表匹配列表中的任何元素,是不是在unique_list我添加它。

如果沒有元素匹配我想這個名單追加到not_match_list。

下面你有我的代碼示例。它幾乎可以工作。我不知道爲什麼最後在not_match_list中我已經[2,3,'d'](例如[2,3,'c']或[2,4'd']已經在unique_list中) 任何人都可以解釋爲什麼在not_match_list中有[2,3,'d']和/或者建議我如何重寫這個代碼更pythonic,請?

unique_list = [[1, 2, 'a'], [4, 2, 'b'], [1, 3, 'c'], [2, 3, 'c'], [2, 4, 'd']] 
not_match_list = [] 
elements_to_check = [[2, 3, 'a'], [3, 4, 'a'], [4, 2, 'a'], [4, 2, 'a'], [2, 3, 'd'], [9, 9, 'z']] 

print(unique_list) 
for unique_element in unique_list: 
    for element_to_check in elements_to_check: 
     if element_to_check[0] == unique_element[0] and element_to_check not in unique_list: 
      unique_list.append(element_to_check) 
     elif element_to_check[1] == unique_element[1] and element_to_check not in unique_list: 
      unique_list.append(element_to_check) 
     elif element_to_check[2] == unique_element[2] and element_to_check not in unique_list: 
      unique_list.append(element_to_check) 
     elif element_to_check not in unique_list and element_to_check not in not_match_list: 
      not_match_list.append(element_to_check) 

print(unique_list) 
print(not_match_list) 

預期的結果:

unique_list = [[1, 2, 'a'], [4, 2, 'b'], [1, 3, 'c'], [2, 3, 'c'], [2, 4, 'd'], [2, 3, 'a'], [3, 4, 'a'], [4, 2, 'a'], [2, 3, 'd']] 
not_match_list = [[9, 9, 'z']] 
+0

我不完全明白你想要做什麼。你有兩個列表,你想在第三個列表中做什麼? – L3viathan

+0

unique_list - 這是最終列表\ n \ n elements_to_check - 需要檢查的元素列表。如果任何元素與unique_list中的元素相同,並且此列表不在unique_elements中,則需要在該元素後面追加unique_list。 \ n \ n not_match_list - elements_to_check中的列表的列表,其中沒有任何具有唯一列表中的元素的公共元素 – Kacper

+0

那麼該示例的答案是什麼? – ZWiki

回答

0

我相信你可以ACHI前夕你想要什麼只是你的代碼輕微重排:

for element_to_check in elements_to_check: 
    for unique_element in unique_list: 
     if element_to_check[0] == unique_element[0] and element_to_check not in unique_list: 
      unique_list.append(element_to_check) 
     elif element_to_check[1] == unique_element[1] and element_to_check not in unique_list: 
      unique_list.append(element_to_check) 
     elif element_to_check[2] == unique_element[2] and element_to_check not in unique_list: 
      unique_list.append(element_to_check) 

    if element_to_check not in unique_list and element_to_check not in not_match_list: 
     not_match_list.append(element_to_check) 
0

這不是一個完整的解決方案,但如果我理解正確的話,你至少可以簡化這個:

if element_to_check[0] == unique_element[0] and element_to_check not in unique_list: 
    unique_list.append(element_to_check) 
elif element_to_check[1] == unique_element[1] and element_to_check not in unique_list: 
    unique_list.append(element_to_check) 
elif element_to_check[2] == unique_element[2] and element_to_check not in unique_list: 
    unique_list.append(element_to_check) 
elif element_to_check not in unique_list and element_to_check not in not_match_list: 
    not_match_list.append(element_to_check) 

這樣:

if any(to_check == unique for to_check, unique in zip(element_to_check, unique_list)) and element_to_check not in unique_list: 
    unique_list.append(element_to_check) 
else: 
    not_match_list.append(element_to_check)