我是 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'])
我知道这并不完全符合您的要求,但在执行此类操作时使用集合而不是列表通常是更好的做法。
关于python - 在列表中查找匹配和不匹配的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8960676/