如何使用含iterable unpacking的list comprehension优化成对字符串解析?
一行列表推导式处理空格分隔的逗号键值对
需求场景
给定单行输入内容为空格分隔的逗号键值对(示例如下),需要将其转换为字符串元组的列表:
805i,9430 3261i,9418 3950i,9415 4581i,4584i 4729i,9421 6785i,9433 8632i,9434 9391i,9393i
原实现通过两次循环完成,但希望用一行列表推导式实现,且避免重复调用split方法。
解决方案
可以结合列表推导式与可迭代解包实现,有两种简洁写法:
- 直接将分割结果转为元组:
bss = [tuple(pair.split(',')) for pair in line.strip().split()]
- 显式解包键值对:
bss = [(x, y) for x, y in (pair.split(',') for pair in line.strip().split())]
说明
- 内层的生成器表达式
(pair.split(',') for pair in line.strip().split())会逐个处理空格分割后的每个元素,每个元素仅调用一次split(',')完成分割; - 第一种写法利用
tuple()直接将分割后的列表转为元组,代码更简洁; - 第二种写法通过显式解包
x, y,逻辑更直观,适合需要明确处理两个值的场景。
内容的提问来源于stack exchange,提问作者Murray Patterson
相关产品推荐
相关产品推荐

