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]
提取最后一个