Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中比较部分匹配的列表?_Python_List_Comparison - Fatal编程技术网

如何在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没问题,只需将分数给予正确的回答者即可。