比较2个列表并返回匹配项

时间:2017-10-29 05:51:12

标签: python python-3.x list function

我有两个彼此相关的函数 - 第一个删除相同且位置相同的字符,并返回不匹配的字符:

def remove(l1, l2):
    r = []
    for char in range(len(l1)):
        if l1[char] != l2[char]:
            r.append(l1[char])
    return r

虽然此函数遍历两个列表,但使用上一个函数删除相同的值。然后使用左边的内容找到b中相同的值(但它们不需要位于相同的位置)。

def search(a, b):
    found = []
    elim = remove(a, b) 
    for char in elim:
        if char in b:
            find = 'y'
            found.append(find)
    return found

虽然我能够为我使用的其他示例返回正确数量的'y',但是当我有多个相同的值时,它会中断。如果列表'b'中只有1'V',但列表'a'中只有2',我只想要1'y'返回它,而不是2.因为我不知道从哪里开始,我的功能返回:

    search(['L', 'F', 'V', 'V'], ['V', 'F', 'O', 'R'])
Expected:
    ['y']
Got:
    ['y', 'y']

提前致谢!

3 个答案:

答案 0 :(得分:2)

这应该适合你:

def remove(l1, l2):
    return [char1 for char1, char2 in zip(l1, l2) if char1 != char2]

def search(a, b):
    elim = remove(a, b)
    return ['y' for char in set(elim) if char in b]

print(search(['L', 'F', 'V', 'V'], ['V', 'F', 'O', 'R']))

输出:['y']

我使用set(elim)remove()创建的列表中删除重复项。

答案 1 :(得分:1)

试试这个

def remove(l1, l2):
    r = []
    print l1
    print l2
    for char in range(len(l1)):
        if l1[char] != l2[char]:
            #the below line your code appending index of char , i am appending char
            r.append(l1[char])
    return r


def search(a, b):
    found = []
    elim = remove(a, b)
    print elim
      #the below line your code iterating through all chars of elim , i am looping through only unique ones using set 
    for char in set(elim):
        if char in b:
            find = 'y'
            found.append(find)
    return found

答案 2 :(得分:1)

将您的第二个功能更改为:

def search(a, b):
    found = []
    elim = remove(a, b) 
    for char in elim:
        if a[char] in b:
            find = 'y'
            found.append(find)
            b.remove(a[char])
    return found

这考虑到elim包含索引而不是字符。每当'{''被b索引时,它将从elim中删除一个'V'。但如果两个列表都包含两个'V',那么你将得到两个'y'。我不知道这是不是你想要的。你对这个问题的陈述并不清楚。但我很确定你是一名Python初学者,并且还没有准备好使用其他答案中的高级概念。