Python:如何找到两个字符串列表之间的差异?

时间:2014-02-04 00:41:39

标签: python string list

我正在使用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()函数是否在搞乱?

感谢您的帮助!

3 个答案:

答案 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