如何以Pythonic方式将姓名字符串转换为姓名对列表
Python实现姓名对转换方案
输入的姓名字符串是按「名 姓 名 姓」规则空格分隔的结构化文本,只需要按每两个元素为一组拼接,就能得到目标格式的姓名列表。
推荐写法(地道Pythonic,性能最优)
利用迭代器惰性配对,不需要额外生成中间列表,处理超长字符串时内存优势明显:
names = "John Doe Jane Doe John Smith Jane Smith" # 如果原字符串尾部带误输入的句号、空格,先执行下一行清理 # names = names.rstrip('. ') part_iterator = iter(names.split()) outs = [f"{first_name} {last_name}" for first_name, last_name in zip(part_iterator, part_iterator)]
执行后得到的outs和预期结果完全一致:
["John Doe", "Jane Doe", "John Smith", "Jane Smith"]
这个写法的原理是:zip会按顺序从传入的迭代器中取值,同一个迭代器传入两次时,会依次消耗元素:第一次取第1个元素作为名,第二次取第2个元素作为姓,下一轮自动取第3、4个元素,刚好完成两两分组。
易读版写法
如果更侧重代码直白、降低理解成本,可以用步长切片的方式实现,适合短字符串场景:
names = "John Doe Jane Doe John Smith Jane Smith" parts = names.split() outs = [f"{parts[i]} {parts[i+1]}" for i in range(0, len(parts), 2)]
注意:以上写法默认输入字符串格式完全合规,不存在带空格的多段姓名、缺失名/姓的异常情况,如果输入存在格式噪声,需要额外增加长度校验、异常捕获逻辑。
内容的提问来源于stack exchange,提问作者bigdee
相关产品推荐
相关产品推荐

