返回指示两个列表中匹配的列表

时间:2017-10-28 03:48:43

标签: python-3.x list

我有一个函数,我需要为两个列表中正确位置的每个正确字母返回'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?

提前致谢!

3 个答案:

答案 0 :(得分:3)

更好的方法是使用ziplist 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