在Python中比较部分列表和完整列表

2024-10-03 02:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想比较一下之前被分割并再次匹配的两个列表。在

我有两张单子。未分裂的和分裂的

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

第二个列表已经转换为int并按大小排序。我想看看是否可以比较这两个列表,因为“store1 120”与“120”最为相似,并将返回整个字符串,以便它可以再次拆分并只返回存储名称。如何比较这两个列表以返回最相似的列表?大多数搜索只返回一个不太有用的整数列表。在

编辑: 我可以从一个已经修改过的列表中,从一个已经修改过的列表中获取一些信息。原始列表可能也会有所不同,因此它需要依赖于输入而不是预定义的定义。在


Tags: 字符串名称信息编辑列表排序整数单子
3条回答

在我看来,你想用一本店号字典来储存店名。您只需使用list1就可以做到这一点。在

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

现在你只需要反过来。在

^{pr2}$

现在,您可以使用list2来获取存储名称或只需遍历键值对。在

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

使用字典(散列/映射),当您拆分列表时,将项目存储在查找字典中

#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];

有几件事要考虑

  1. 第一个列表只是名称和第二个列表中的一个数字的串联。在
  2. 数字总是在字符串的末尾
  3. 在列表中搜索第一个列表中的每一项不是很有效

解决方案

  1. 要求解(1)和(2),只需在空间上执行正确的分区并提取名称和数字
  2. 要求解(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

相关问题 更多 >