2017-10-29 67 views
-1

我有涉及彼此兩個功能 - 第一個將刪除相同,並且在同一位置的字符,並返回一個不匹配的:比較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'] 

在此先感謝!

+1

在'remove()'中,您將int整理到列表中,而不是字符。 – 2017-10-29 05:54:56

+0

@先生,將它變成一個不可見的ascii字符。 – gommb

+0

'r.append(char)'這是錯誤的,這會給char的索引而不是char,你必須使用'r.append(l1 [char])' –

回答

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

這應該爲你工作:

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

根據問題描述,這似乎是正確的。儘管似乎沒有任何理由將'set(elim)'包裝在'list()'中。 – 2017-10-29 06:10:52

+1

@Wyatt我想你的權利,謝謝你的提示。 – gommb

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 

這考慮到了小琳包含索引,而不是字符。每當'V'索引爲elim時,它將從b中刪除一個'V'。但是,如果兩個列表都包含兩個'V',您將得到兩個'y'。我不知道這是你想要的。你對這個問題的陳述並不清楚。但是我確信你是一個Python初學者,並沒有準備好使用其他答案中的高級概念。

+0

對不起,缺乏清晰度!正如你所說我是初學者,所以我無法表達我的意思。並感謝您的解釋! – Athena

相關問題