2015-10-14 38 views
1

我有一些名單:Python:替換多個列表中項目的發生?

#list a 
a = ['python', 'c++', 'c#', 'c-plus-plus', 'c-sharp', 'csharp', 'cplus'] 

# list b 
b = ['c++', 'c-plus-plus', 'cplus', 'c-plusplus', 'cplusplus'] 

# list c 
C = ['c#', 'c-sharp', 'csharp'] 

的替代品後,list a必須

# list a after replacements 
a = ['python', 'cplusplus', 'csharp', 'cplusplus', 'csharp', 'csharp', 'cplusplus'] 

我想要替換項目的所有出現在list blist acplusplus

list c的所有內容list a必須替換爲csharp

反覆是可以接受的。

回答

3

嘗試這種情況:

['cplusplus' if i in b else i for i in a] 

輸出:

[ '蟒', 'CPLUSPLUS', 'C#', 'CPLUSPLUS', 'CSHARP', 'CSHARP',' CPLUSPLUS']

Demo

+0

如果我在C一樣,我因爲當時來解決他的第二個點,'[「CSHARP」我在a]' – Tgsmith61591

+0

@ Tgsmith61591是的。無需重複上面的相同代碼:) – sam

2

sam2090的代碼是正確的,但需要兩次傳球對於bc中的每一個。一種方法做它一通:

['cplusplus' if i in b else 'csharp' if i in c else i for i in a] 
3

爲您的特定問題,這將工作:

def replace_synonyms(target,synonyms): 
    """ Replaces all occurences of any word in list target with last element in synonyms """ 
    return [synonyms[-1] if word in synonyms else word for word in target] 
a=replace_synonyms(a,b) 
a=replace_synonyms(a,c) 
相關問題