将部分列表与Python中的完整列表进行比较

时间:2013-10-08 02:54:15

标签: python list python-3.x compare

我想比较先前拆分并再次匹配的两个列表。

我有两个清单。未分裂的和分裂的

 list1 = ['store1 120', 'store2 140', 'store3 160', 'store4 150']
 list2 = [120, 140, 150, 160]

第二个列表已经变成整数并按大小排序。我想看看我是否可以比较两个列表,因为'store1 120'与'120'最常见,并且将返回整个字符串,以便可以再次拆分并返回商店名称。如何比较这两个列表以返回最相似的?大多数搜索只返回单个整数列表,这些列表不是很有用。

编辑: 澄清我需要一些可以从已修改的列表中获取数字并返回类似列表上的关联位置的内容。原始列表可以并且将会变化,因此它需要依赖于输入而不是预定义的定义。

4 个答案:

答案 0 :(得分:2)

要考虑的事情

  1. 您的第一个列表只是名称和第二个列表中的数字的串联。
  2. 数字始终位于字符串的末尾
  3. 在第一个列表中搜索每个项目的列表效率不高
  4. 解决方案

    1. 要解决(1)和(2),只需在空间上执行正确的分区并提取名称和数字
    2. 要解决(3),请使用集合而不是列表
    3. <强>演示

      >>> list2 = [120, 140, 150, 160]
      >>> set2 = set(list2)
      >>> for e in list1:
          name, _, num = e.rpartition(' ')
          if int(num) in set2:
              print name
      
      
      store1
      store2
      store3
      store4
      

答案 1 :(得分:1)

听起来我想要一个商店号码字典来存储名字。您只需使用list1即可完成此操作。

>>> d = dict([z.split() for z in list1])
>>> d
{'store4': '150', 'store3': '160', 'store2': '140', 'store1': '120'}

现在你只需要反过来了。

>>> inv_map = {int(v):k for k, v in d.items()}
>>> inv_map
{160: 'store3', 120: 'store1', 140: 'store2', 150: 'store4'}

现在,您可以使用list2获取商店名称,或者只使用键值对。

>>> for x in list2:
...   print inv_map[x]
... 
store1
store2
store4
store3

答案 2 :(得分:1)

使用字典(散列/地图),在拆分列表时,将项目存储在查找字典中,

#You have:

list1 = ['store1 120', 'store2 140', 'store3 160', 'store4 150']
list2 = [120, 140, 150, 160]

#While building list2, build lookup,

lookup = {}
lookup[120]= 'store1 120'
lookup[140]= 'store2 140'
lookup[150]= 'store3 150'
lookup[160]= 'store4 160'
print "store: "+str(150)+", "+lookup[150];

#delete one,
del lookup[160];

答案 3 :(得分:0)

没有提到寻求答案的效率,所以对于list2中的每个数字,看看list1中是否有一个存储有该数字的商店。

list1 = ['store1 120', 'store2 140', 'store3 160', 'store4 150']
list2 = [120, 140, 150, 160]

for number in list2:
    for store in list1:
        if str(number) in store:
            print 'number:', number, 'store:', store.split()[0]

产地:

>>> 
number: 120 store: store1
number: 140 store: store2
number: 150 store: store4
number: 160 store: store3
>>> 

如果您只需要按照号码对商店名称进行排序,请使用list.sort()。

list1.sort(key = lambda item: item.split()[1])
print '\n'.join(item.split()[0] for item in list1)