比较2所列出并返回匹配

问题描述:

我有涉及彼此两个功能 - 第一个将删除相同,并且在同一位置的字符,并返回一个不匹配的:比较2所列出并返回匹配

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'] 

在此先感谢!

+1

在'remove()'中,您将int整理到列表中,而不是字符。 – 2017-10-29 05:54:56

+0

@先生,将它变成一个不可见的ascii字符。 – gommb

+0

'r.append(char)'这是错误的,这会给char的索引而不是char,你必须使用'r.append(l1 [char])' –

试试这个

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 

这应该为你工作:

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

根据问题描述,这似乎是正确的。尽管似乎没有任何理由将'set(elim)'包装在'list()'中。 – 2017-10-29 06:10:52

+1

@Wyatt我想你的权利,谢谢你的提示。 – gommb

更改你的第二个功能是:

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 

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

+0

对不起,缺乏清晰度!正如你所说我是初学者,所以我无法表达我的意思。并感谢您的解释! – Athena