python - 在列表中查找匹配和不匹配的项目

标签 python

我是 Python 的新手,对于列表可以做什么和不能做什么感到有点困惑。我有两个列表,我想比较它们并以二进制格式返回匹配和不匹配的元素。 List1 的长度不变,而 List2 的长度不同(但总是比 List1 短)。

例如:

List1 = ['dog', 'cat', 'pig', 'donkey']
List2 = ['dog', 'cat', 'donkey']

想要的输出:

List3 = [1, 1, 0, 1]

我目前的代码是:

def match_nonmatch(List1, List2):
    List3 = []
    for i in range(len(List1)):
        for j in range(len(List2)):
            if List1[i] == List2[j]:
                List3.append(1)
            else:
                List3.append(0)
   return List3

当我比较列表时,我能够返回匹配项,但是当我包含上面显示的 else 语句以返回不匹配项时,我最终得到的列表比它应该的要长得多。例如,当我使用一个列表来比较 60 个项目时,我得到一个包含 3600 个项目而不是 60 个项目的列表。

如果有人能向我解释我的代码目前存在的问题并建议我如何修改代码以使其达到我想要的效果,我将不胜感激。

最佳答案

使用set 代替list。这样你就可以做很多好事:

set1 = set(['dog', 'cat', 'pig', 'donkey'])
set2 = set(['dog', 'cat', 'donkey'])

matched = set1.intersection(set2) # set(['dog', 'cat', 'donkey'])
unmatched = set1.symmetric_difference(set2) # set(['pig'])

我知道这并不完全符合您的要求,但在执行此类操作时使用集合而不是列表通常是更好的做法。

更多关于套装的信息:http://docs.python.org/library/stdtypes.html#set

关于python - 在列表中查找匹配和不匹配的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8960676/

相关文章:

python - 笨拙的 lambda 函数

python - Dexterity类型中的反向引用RelationList

python - 使用reverse()时遇到问题

python - Django:将模型字段值写入另一个模型下拉列表?

python - 在 Dreamhost 上调试 Django/Python

python - 如何仅重定向流的一部分?

python - 替换python 3中的重复单词

python - MongoEngine 模式 - 名称错误

python - 处理异常 - python 中的负平方根

python - 在另一个数组中的位置映射 numpy 数组和求和值