我有两个彼此相关的函数 - 第一个删除相同且位置相同的字符,并返回不匹配的字符:
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']
提前致谢!
答案 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初学者,并且还没有准备好使用其他答案中的高级概念。