我正在使用Python 3.我有两个字符串列表,我正在寻找两者之间的不匹配。我的代码适用于较小的列表,但不适用于我正在编写的较大列表。
非工作清单的输入格式如下:
mmec11.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org
mmec13.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org
mmec12.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org
mmec14.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org
我以上述格式比较两个数据列表的功能是:
result = []
for x in mmeList1:
if x not in mmeList2:
result.append(x)
return result
问题是它不起作用。我得到两个列表的输出文件合并为一个长列表。当我进行测试时,每次比赛时都说“嗨”,没有任何反应。有没有人有任何想法,我出错了。我在一家电信公司工作,我们正在尝试通过大型数据库转储来查找缺少的MME。
我想知道我的输入功能是否坏了?功能是:
for line in input:
field = line.split()
tempMME = field[0]
result.append(tempMME)
我对这些东西不太熟悉,我想知道由于MME名称中的句点,line.split()函数是否在搞乱?
感谢您的帮助!
答案 0 :(得分:6)
如果您不需要保留排序,以下内容将导致list2中存在但不存在list1的所有模式。
result = list(set(mmeList2) - set(mmeList1))
答案 1 :(得分:3)
我测试了你的比较函数并且它工作正常,假设mmeList1和mmeList2中的数据是正确的。
例如,我使用以下数据运行了比较函数的测试。
mmeList1:
mmec11.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org
mmec13.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org
mmec12.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org
mmec14.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org
mmeList2:
mmec11.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org
mmec13.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org
mmec12.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org
mmec15.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org
结果包含:
mmec14.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org
我怀疑问题是mmeList1和mmeList2不包含您认为它们包含的内容。不幸的是,如果没有看到如何填充mmeList1和mmeList2,我们就无法帮到你。
如果你想看到两者的差异,(即结果应该包含mmec14和mmec15),那么你想要使用的是集合。
例如:
mmeSet1 = set(mmecList1)
mmeSet2 = set(mmecList2)
print mmeSet1.symmetric_difference(mmeSet2)
将导致:
['mmec14.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org', 'mmec15.mmegifffa.mme.epc.mnc980.mcc310.3gppnetwork.org']
答案 2 :(得分:0)
首先,在列表上使用set()是减少迭代的最佳方法。试试这个
result = []
a=list(set(mmeList1))
b=list(set(mmeList2))
for x in a:
if x not in b:
result.append(x)
return result