2017-08-11 98 views
1

爲什麼我無法執行此操作?我有2個以下的列表,嵌套和不相等的大小。我瞭解到,我需要列表轉換爲集(哈希的),然後進行比較,但我不明白的比較的輸出(如獲得共同的元素) 我嘗試下面的方法嵌套不等列表比較

list1 = [[u'i2_instance_floating_ip_association'], [u'i1_v1_instance_volume_attach']] 
list2 = [[u'i2_instance_floating_ip_association', u'i2_v1_instance_volume_attach'], [u'i1_instance_floating_ip_association', u'i1_v1_instance_volume_attach']] 
list1 = map(tuple, list1) 
list2 = map(tuple, list2) 
print(set(list1) & set(list2)) 

給輸出set()

for item in list1: 
    if item in list2: 
     print(item) 

給出什麼

fin = [i for i in list1 if i in list2] 
print("fin", fin) 

給出fin []

回答

1

問題是嵌套。你必須一直工作到元素。 例如:

for item in list1: 
    for list2_item in list2: 
     if item[0] in list2_item: 
      print(item) 

輸出:

['i2_instance_floating_ip_association'] 
['i1_v1_instance_volume_attach'] 

另一種方法是首先拼合兩份名單,並將其轉換成集:

flat1 = set(x[0] for x in list1) 
flat2 = set(y for x in list2 for y in x) 
print(flat1 & flat2) 

輸出:

{'i1_v1_instance_volume_attach', 'i2_instance_floating_ip_association'} 

加一些打印的調試和學習會發生什麼:

for item in list1: 
    print('item', item) 
    for list2_item in list2: 
     print('list2_item', list2_item) 
     if item[0] in list2_item: 
      print(' found', item[0], 'in', list2_item) 
     else: 
      print(' did not find', item[0], 'in', list2_item) 

輸出:

item ['i2_instance_floating_ip_association'] 
list2_item ['i2_instance_floating_ip_association', 'i2_v1_instance_volume_attach'] 
    found i2_instance_floating_ip_association in ['i2_instance_floating_ip_association', 'i2_v1_instance_volume_attach'] 
list2_item ['i1_instance_floating_ip_association', 'i1_v1_instance_volume_attach'] 
    did not find i2_instance_floating_ip_association in ['i1_instance_floating_ip_association', 'i1_v1_instance_volume_attach'] 
item ['i1_v1_instance_volume_attach'] 
list2_item ['i2_instance_floating_ip_association', 'i2_v1_instance_volume_attach'] 
    did not find i1_v1_instance_volume_attach in ['i2_instance_floating_ip_association', 'i2_v1_instance_volume_attach'] 
list2_item ['i1_instance_floating_ip_association', 'i1_v1_instance_volume_attach'] 
    found i1_v1_instance_volume_attach in ['i1_instance_floating_ip_association', 'i1_v1_instance_volume_attach'] 
+0

我正在使用你的方法輸出。我認爲遍歷像[我爲我在list1中,如果我在列表2]應該已經通過了所有元素。 –

+0

只需在loop版本中添加一些打印件即可查看您獲得的物品實際是什麼樣子。 –