我有一个函数,我需要为两个列表中正确位置的每个正确字母返回't'。
def match(l1, l2):
'''
>>> match(['L', 'M', 'L', 'I'], ['L', 'M', 'O', 'I'])
['t', 't', 't']
'''
found = []
for alpha in range(len(l1)):
find = l1[alpha] == l2[alpha]
find = 't'
found.append(find)
return found
到目前为止,我有这个,但它返回:
match(['L', 'M', 'L', 'I'], ['L', 'M', 'O', 'I'])
Expected:
['t', 't', 't']
Got:
['t', 't', 't', 't']
如何修复它以便返回正确数量的't?
提前致谢!
答案 0 :(得分:3)
更好的方法是使用zip
和list comprehension
:
def match(l1, l2):
return [ 't' for x,y in zip(l1,l2) if x==y ]
#driver values:
IN : match(['L', 'M', 'L', 'I'], ['L', 'M', 'O', 'I'])
OUT : ['t', 't', 't']
在您的代码中,您遇到的问题是由于字符不匹配未被处理的情况。
所以在for
循环中,它可以是:
if l1[alpha] == l2[alpha]:
find = 't'
found.append(find)
其中,当字符不相同时,它不会追加到结果中。
答案 1 :(得分:1)
你在做:
find = l1[alpha] == l2[alpha]
find = 't'
但如果find
在第一行评估为False
怎么办?它仍然被覆盖(这是一个问题)。
在将't'
添加到found
之前,您是否可以考虑通过添加条件来解决问题?
答案 2 :(得分:1)
假设两个列表的大小相同,请使用enumerate()
-
def match(l1, l2):
'''
>>> match(['L', 'M', 'L', 'I'], ['L', 'M', 'O', 'I'])
['t', 't', 't']
'''
found = []
for idx, i in enumerate(l1):
if i == l2[idx]:
found.append('t')
return found