我想比较先前拆分并再次匹配的两个列表。
我有两个清单。未分裂的和分裂的
list1 = ['store1 120', 'store2 140', 'store3 160', 'store4 150']
list2 = [120, 140, 150, 160]
第二个列表已经变成整数并按大小排序。我想看看我是否可以比较两个列表,因为'store1 120'与'120'最常见,并且将返回整个字符串,以便可以再次拆分并返回商店名称。如何比较这两个列表以返回最相似的?大多数搜索只返回单个整数列表,这些列表不是很有用。
编辑: 澄清我需要一些可以从已修改的列表中获取数字并返回类似列表上的关联位置的内容。原始列表可以并且将会变化,因此它需要依赖于输入而不是预定义的定义。
答案 0 :(得分:2)
要考虑的事情
解决方案
<强>演示强>
>>> 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)