如何在Python中比较部分匹配的列表?
如果这个问题措词不当,我道歉 我的脚本正在对交易消息进行比较,以字符串值的形式编写,我希望查看是否有字段出现在一条消息中,而不是另一条消息中。正在使用的两条消息的示例如下:如何在Python中比较部分匹配的列表?,python,list,comparison,Python,List,Comparison,如果这个问题措词不当,我道歉 我的脚本正在对交易消息进行比较,以字符串值的形式编写,我希望查看是否有字段出现在一条消息中,而不是另一条消息中。正在使用的两条消息的示例如下: msg1 = ['35=D', '52=20160429', '11=0001A', '44=440', '15=EUR'] msg2 = ['35=D', '52=20160428', '11=0001B', '44=439', '15=EUR'] 为了比较这些列表,我使用了: result = [o for o in
msg1 = ['35=D', '52=20160429', '11=0001A', '44=440', '15=EUR']
msg2 = ['35=D', '52=20160428', '11=0001B', '44=439', '15=EUR']
为了比较这些列表,我使用了:
result = [o for o in a if o not in b]
现在,我的脚本为我提供了不完全匹配的元素,例如:
nonmatches = ['52=20160428', '11=0001B', '44=439']
这对我不起作用,因为标记仍然存在于两条消息中。所以我的问题是-我如何在每个元素的前三个字符之后比较这两个列表 如@avinash所说,使用切片:
result = [o for o in msg1 if o[3:] not in [field[3:] for field in msg2]]
正如@avinash所说,使用切片:
result = [o for o in msg1 if o[3:] not in [field[3:] for field in msg2]]
我真的不明白你的意思。是否要在msg1中查找其他元素。 我在这里提供我的答案
In [21]: msg1 = ['35=D', '52=20160429', '11=0001A', '44=440', '15=EUR']
In [22]: msg2 = ['35=D', '52=20160428', '11=0001B', '44=439', '15=EUR']
In [23]: [o for o in msg1 if o not in msg2]
Out[23]: ['52=20160429', '11=0001A', '44=440']
我真的不明白你的意思。是否要在msg1中查找其他元素。 我在这里提供我的答案
In [21]: msg1 = ['35=D', '52=20160429', '11=0001A', '44=440', '15=EUR']
In [22]: msg2 = ['35=D', '52=20160428', '11=0001B', '44=439', '15=EUR']
In [23]: [o for o in msg1 if o not in msg2]
Out[23]: ['52=20160429', '11=0001A', '44=440']
您确定列表表示法是数据的最佳容器吗?也许你应该用口述
msg1 = ['35=D', '52=20160429', '11=0001A', '44=440', '15=EUR']
msg2 = ['35=D', '52=20160428', '11=0001B', '44=439', '15=EUR']
d1 = {key:value for key,value in [item.split('=',1) for item in msg1]}
d2 = {key:value for key,value in [item.split('=',1) for item in msg2]}
现在,您的数据存储在dict中
print(d1)
# {'15': 'EUR', '44': '440', '11': '0001A', '35': 'D', '52': '20160429'}
print (d1.keys())
# dict_keys(['15', '44', '11', '35', '52'])
现在,您可以使用集运算,它的性能将优于上面@Phillip Martin的答案
例如:
您确定列表表示法是数据的最佳容器吗?也许你应该用口述
msg1 = ['35=D', '52=20160429', '11=0001A', '44=440', '15=EUR']
msg2 = ['35=D', '52=20160428', '11=0001B', '44=439', '15=EUR']
d1 = {key:value for key,value in [item.split('=',1) for item in msg1]}
d2 = {key:value for key,value in [item.split('=',1) for item in msg2]}
现在,您的数据存储在dict中
print(d1)
# {'15': 'EUR', '44': '440', '11': '0001A', '35': 'D', '52': '20160429'}
print (d1.keys())
# dict_keys(['15', '44', '11', '35', '52'])
现在,您可以使用集运算,它的性能将优于上面@Phillip Martin的答案
例如:
使用切片法
i[3:][==j[3:][/code>,因此样本数据的预期输出为['0001B','0001A','440','20160429','20160428','439']
?@timgeb不,预期输出将为空,因为每个元素(标记)的前3个字符都存在于两个列表中。@AvinashRaj谢谢,那似乎就是我要找的。如果你想写一个正式的答案,我会检查它是否正确。@User588233没问题,只要给正确的答案者分数就行了。使用切片法I[3:==j[3://code>,那么你的样本数据的预期输出是['0001B','0001A','440','20160429','20160428','439]
?@timgeb no,预期的输出将是零,因为每个元素(标记)的前3个字符都出现在两个列表中。@AvinashRaj谢谢,这似乎就是我想要的。如果你想写一个正式的答案,我会检查它是否是正确的答案。@User588233没问题,只需将分数给予正确的回答者即可。