如何在Python中分割字符串后直接追加到两个数组且不创建临时变量?
更优雅的无临时变量实现方案
嘿,我懂你追求简洁优雅代码的心情!先说说你最初用map+lambda的问题:确实是因为list.append()方法执行后会返回None,而map期望的是能处理参数并返回值的函数,所以那套写法逻辑上就行不通,而且map本来也不是用来做这种带副作用(修改列表)的操作的。
给你两个更符合需求的方案,都不需要额外的临时列表:
方案一:直接解包输入行(可读性拉满)
既然每行输入分割后正好是两个元素,咱们可以直接把它们解包到两个变量里,再分别追加到列表,完全不用临时列表:
a = [] b = [] for _ in range(n): # 如果需要转成整数,就改成 x, y = map(int, raw_input().split()) x, y = raw_input().split() a.append(x) b.append(y)
这个写法比你之前用buf的版本更清爽,没有多余的临时变量,逻辑一目了然。
方案二:用生成器+zip一次性生成(简洁Pythonic)
如果想更极致一点,甚至可以用生成器表达式配合zip的解包特性,直接批量生成a和b:
# 生成器会逐行读取输入,不会一次性创建所有行的列表,内存效率也高 rows = (raw_input().split() for _ in range(n)) # 用zip把所有行的第一个元素、第二个元素分别打包,再解包给a和b a, b = zip(*rows) # 如果需要把元组转成列表(zip返回的是元组),再加两行转换 a = list(a) b = list(b)
这个写法完全没有用到临时列表,生成器是惰性计算的,不会占用额外的内存存储所有行的数据,而且代码非常简洁,很有Python风格。
两种方案都满足你“不创建额外临时变量或临时列表”的需求,你可以根据自己的可读性偏好来选择~
内容的提问来源于stack exchange,提问作者HideDJeker
相关产品推荐
相关产品推荐

