2017-10-28 4 views
2

私は、2つのリストの正しい位置にあるすべての正しい文字に対して 't'を返す必要がある関数を持っています。2つのリストの一致を示すリストを返す

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

は、私はそれをどのように修正すればよいですか?

ありがとうございます!

答えて

3

これを行うには良いアプローチするziplist comprehensionを使用することになります

def match(l1, l2): 
    return [ 't' for x,y in zip(l1,l2) if x==y ] 

#driver値:あなたのコードで

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

あなたはやっている:

find = l1[alpha] == l2[alpha] 
    find = 't' 

が、何find場合、最初の行にFalseに評価されますか?それはまだオーバーライドされます(これは問題です)。

't'foundを追加する前に条件を追加して修正する方法が考えられますか?

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 
関連する問題