我想比较之前拆分并再次匹配的两个列表。
我有两个列表。 未拆分的和拆分的
list1 = ['store1 120', 'store2 140', 'store3 160', 'store4 150']
list2 = [120, 140, 150, 160]
第二个列表已经变成了整数并按大小排序。我想看看我是否可以比较这两个列表,因为"store1 120"与"120"最相似,并且会返回整个字符串,以便可以再次拆分并仅返回商店名称。如何比较这两个列表以返回最相似的列表?大多数搜索只返回单个整数列表,这不是很有用。
编辑:澄清一下,我需要一些可以从已经修改的列表中获取数字并在类似列表中返回关联位置的东西。原始列表可以并且将会变化,因此它需要依赖于输入而不是预定义的定义。
需要考虑的几件事
- 您的第一个列表只是第二个列表中存在的名称和数字的串联。
- 数字始终位于字符串的末尾
- 在列表中搜索第一个列表中的每个项目效率不高
溶液
- 要解决(1)和(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
在我看来,你想要一本商店编号字典来存储名称。您只需使用 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
使用字典(哈希/映射),当您拆分列表时,将项目存储在查找字典中,
#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];
没有提到寻找答案的效率,因此对于 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)