我对 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 个。
如果有人可以向我解释我的代码目前存在的问题并建议我如何修改代码以使其执行我想要的操作,我将不胜感激。
Use 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 http://docs.python.org/library/stdtypes.html#set
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)