查找列表中的匹配项和不匹配项

Pla*_*pus 6 python

我对Python很陌生,并且对于你能做什么和不能用列表做些什么感到困惑.我有两个要比较的列表,并以二进制格式返回匹配和非匹配元素.List1长度恒定,而长度List2不同(但总是短于List1).

例如:

List1 = ['dog', 'cat', 'pig', 'donkey']
List2 = ['dog', 'cat', 'donkey']
Run Code Online (Sandbox Code Playgroud)

需要输出:

List3 = [1, 1, 0, 1]
Run Code Online (Sandbox Code Playgroud)

我到目前为止的代码是:

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
Run Code Online (Sandbox Code Playgroud)

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

我很感激,如果有人可以向我解释我的代码目前的问题,并建议我如何修改代码,以便它做我想要的.

Dor*_*mer 18

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'])
Run Code Online (Sandbox Code Playgroud)

我知道这并不是你要求的,但在做这类事情时,通常使用集合代替列表是一种更好的做法.

更多关于集合:http://docs.python.org/library/stdtypes.html#set


Sri*_*thy 8

使用以下代码.

listt3=[]

for i in listt1:
    if i in listt2:
        listt3.append(1)
    else:
        listt3.append(0)
Run Code Online (Sandbox Code Playgroud)

如果你喜欢单行,

listt3=[ 1 if i in listt2 else 0 for i in listt1]


小智 5

您也可以使用按位运算:

List1 = ['dog', 'cat', 'pig', 'donkey']  
List2 = ['dog', 'cat', 'donkey']  
Run Code Online (Sandbox Code Playgroud)

匹配:

set(List1) & set(List2)   
Run Code Online (Sandbox Code Playgroud)

不匹配:

set(List1) ^ set(List2) 
Run Code Online (Sandbox Code Playgroud)