首页 > 解决方案 > 如果它以另一个列表中的字符串开头,则替换为字符串

问题描述

我有两个单词列表:XY. 当且仅当列表 X 中的单词与列表 Y 中单词的第一部分完全相同时,我想用列表 Y 中的单词替换列表 X 中的单词。

例如,我想用单词“参与”(列表 Y)替换单词“参与”(列表 X)。我的清单如下:

X=['les', 'engage', 'du', 'dent', 'de', 'la', 'que', 'sont', 'aussi', 'ceux', 'des', 'dirigeants', 'de', 'la', 'société', '»', 'ferroviaire', ',', 'a-t-il', 'soutenu', 'de', 'des', 'élus', 'du', 'grand-est', 'réunis', 'à', 'l', '’', '.', 'le', 'président', 'de', 'la', 'république', ',', '(', 'à', 'droite', ')', ',', 'aux', 'tés', 'du', 'patron', 'de', 'la', 'sncf', ',', 'guillaume', ',', 'à', 'la', 'gare', ',', 'à', 'paris', ',', 'le', '1er', 'juillet', '2017.', 'van', 'der', 'l', '’', 'irrita', 'qui', ',', 'par', 'fois', ',', 's', '’', 'des', 'usa', 'de', 'la', 'sncf', 'face', 'aux', 'trains', 'suppri', 'ou', 'aux', 'dessertes', 'abandonnées', 'semble', 'avoir', 'aussi', 'saisi', 'le', 'président', 'de', 'la', 'république', '.', 'devant', 'des', 'élus', 'du', 'grand-est', ',', 'réunis', 'mardi', '26', 'février', 'à', 'l', '’', 'dans', 'le', 'cadre', 'du', 'grand', 'débat', ',', 'a', 'eu', 'des', 'mots', 'très', 'durs', 'contre', 'la', 'sncf', ',', 'qui', 'a', 'fermé', 'la', 'ligne', 'saint-dié', '-', 'le', '23', 'décembre', '2018', ',', 'alors', 'que', 'le', 'chef', 'de', 'l', '’', 's', '’', 'était', 'engagé', ',', 'durant', 'un', 'dans', 'les', 'tué', 'en', 'avril', '2018', ',', 'à', 'ce', 'qu', '’', 'elle', 'reste', 'opération', '.']
Y=['levant', 'lamés', 'devant', 'quenelle', 'irritation', 'cenelle', 'usagers', 'lavant', 'avant', 'opérationnelle', 'supprimés', 'engagements']

为此,我必须逐项比较两个列表并替换项目,对吗?我怎样才能做到这一点?

标签: pythonlist

解决方案


您可以遍历这两个列表,并从中选择一个给定的字符串,Y如果它startswith是一个给定的字符串Xbreak因此您不必遍历 中的所有值Y,或者保留来自 的字符串X

X = ['les', 'engage', 'du', 'dent', 'de', 'la'...
Y = ['levant', 'lamés', 'devant', 'quenelle', 'irritation'...

l = []
for x in X:
    for y in Y:
        if y.startswith(x):
            # append y if the string starts with x
            l.append(y)
            # First match. Break to next x
            break
    # for-else statement
    # If no strings in y begin with x, append x
    else: 
        l.append(x)

输出

['les', 'engagements', 'du', 'dent', 'devant'...

推荐阅读