2017-08-11 97 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版本中添加一些打印件即可查看您获得的物品实际是什么样子。 –