Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果字符串包含同一列表中的另一个字符串,请将该字符串替换为该列表中的另一个字符串_Python_Python 2.7 - Fatal编程技术网

Python 如果字符串包含同一列表中的另一个字符串,请将该字符串替换为该列表中的另一个字符串

Python 如果字符串包含同一列表中的另一个字符串,请将该字符串替换为该列表中的另一个字符串,python,python-2.7,Python,Python 2.7,名单上有全名和简称。我想在下面的列表中将短名称扩展为全名。波拉德应该换成基隆·波拉德,斯塔克应该换成米切尔·斯塔克 players = ['Pollard', 'Kieron Pollard', 'Mitchell Starc', 'Pollard', 'Starc'] print(players) for i, s in enumerate(players): for p in players: if len(p) > len(s) and s in p: #

名单上有全名和简称。我想在下面的列表中将短名称扩展为全名。波拉德应该换成基隆·波拉德,斯塔克应该换成米切尔·斯塔克

players = ['Pollard', 'Kieron Pollard', 'Mitchell Starc', 'Pollard', 'Starc']

print(players)
for i, s in enumerate(players):
    for p in players:
        if len(p) > len(s) and s in p: # Different string
            players[i] = p
print(players)
输出:

['Pollard', 'Kieron Pollard', 'Mitchell Starc', 'Pollard', 'Starc']
['Kieron Pollard', 'Kieron Pollard', 'Mitchell Starc', 'Kieron Pollard', 'Mitchell Starc']

上述方法非常有效。我想知道是否有更好、更有效的方法来做到这一点。

只需在字典中找到实际姓名及其替换项,然后使用列表理解,通过在字典中查找姓名来重建球员姓名

names = {'Pollard': 'Kieron Pollard', 'Starc': 'Mitchell Starc'}
print [names.get(player, player) for player in players]
# ['Kieron Pollard', 'Kieron Pollard', 'Mitchell Starc', 'Kieron Pollard', 'Mitchell Starc']
传递给
names.get
方法的第二个参数是在字典中不存在第一个参数时返回的默认值

names = {'Pollard': 'Kieron Pollard', 'Starc': 'Mitchell Starc'}
print [names.get(player, player) for player in players]
# ['Kieron Pollard', 'Kieron Pollard', 'Mitchell Starc', 'Kieron Pollard', 'Mitchell Starc']

我会根据球员的长度对他们进行分类,然后从最长的到最短的传递——在到达围堵区时打破内环


另外,请注意,在检查安全壳时,“a”在“ab”中。确保这是你想要的。

关于包容,是的,我可以确定。
名称={p.split()[-1]:p代表玩家中的p,如果p}
@Kiwi-player-names有时可以是三个单词如果短名称总是最后一个,那么没关系:
''在p
中至少代表两个单词,
p.split[-1]
提取最后一个