2015-10-14 39 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) 
相关问题