我有一些清单:
#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 b
替换list a
cplusplus
中所有项目的出现,
虽然list c
中list a
的所有内容都必须替换为csharp
重复是可以接受的。
答案 0 :(得分:3)
试试这个:
['cplusplus' if i in b else i for i in a]
输出:
[' python',' cplusplus',' c#',' cplusplus',' c-sharp' ,' csharp',' cplusplus']
答案 1 :(得分: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)
答案 2 :(得分:2)
sam2090的代码是正确的,但b
和c
分别需要两次传递。一次通过的方法:
['cplusplus' if i in b else 'csharp' if i in c else i for i in a]