比较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']
在此先感谢!
试试这个
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()
创建的列表中删除重复。
根据问题描述,这似乎是正确的。尽管似乎没有任何理由将'set(elim)'包装在'list()'中。 – 2017-10-29 06:10:52
@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初学者,并没有准备好使用其他答案中的高级概念。
对不起,缺乏清晰度!正如你所说我是初学者,所以我无法表达我的意思。并感谢您的解释! – Athena
在'remove()'中,您将int整理到列表中,而不是字符。 – 2017-10-29 05:54:56
@先生,将它变成一个不可见的ascii字符。 – gommb
'r.append(char)'这是错误的,这会给char的索引而不是char,你必须使用'r.append(l1 [char])' –