Python列表拆分问题:将对战字符串列表拆分为两个参赛方列表
解决对战字符串拆分问题
你的问题出在对strip()函数的理解上——strip("vs")并不是拆分"vs"这个子串,而是移除字符串两端所有属于{'v','s'}的单个字符。对你的示例字符串来说,两端的'A'、'B'都不在这个字符集里,所以strip后字符串完全没变化。虽然单字符场景下你可能碰巧拿到了结果,但这是错误的逻辑,一旦对战方标识是多字符就会失效。
方法1:固定分隔符拆分(推荐)
因为你的字符串格式是固定的"X vs Y",直接用split(" vs ")拆分每个字符串,这是最直接高效的方式:
matches = ['A vs B','C vs D','E vs F','G vs H'] t1 = [] t2 = [] for match in matches: team1, team2 = match.split(" vs ") t1.append(team1) t2.append(team2) # 结果: # t1 = ['A', 'C', 'E', 'G'] # t2 = ['B', 'D', 'F', 'H']
如果想用更简洁的写法,用列表推导式+zip:
matches = ['A vs B','C vs D','E vs F','G vs H'] t1, t2 = zip(*[match.split(" vs ") for match in matches]) # 转成列表(zip默认返回元组) t1 = list(t1) t2 = list(t2)
方法2:处理不规范的空格
如果对战字符串里的空格不统一(比如有的是"XvsY"、有的是"X vs Y"),可以用正则表达式匹配任意数量的空白字符:
import re matches = ['A vs B','C vs D','EvsF','G vs H'] t1 = [] t2 = [] for match in matches: # \s* 匹配任意数量的空格(包括0个) team1, team2 = re.split(r'\s*vs\s*', match) t1.append(team1) t2.append(team2)
内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

