为什么Python lambda函数替换for循环时出现TypeError报错?
问题原因分析
核心错误根源有两个:
list.append()方法的返回值固定为None,你在lambda中执行rawdata1.append(i.split('$$$')),每一次迭代的返回值都是None。map会把所有迭代的返回值收集为迭代器,你传给sorted()的就是一个全是None元素的迭代器,排序时需要比较元素大小,而Python不支持None实例之间用<比较,直接触发你遇到的TypeError。- 你的赋值逻辑完全冲突:map迭代过程中确实会往原有rawdata1中追加拆分后的内容,但你紧接着把
sorted()返回的全是None的列表赋值给了rawdata1,直接覆盖了之前追加的有效内容,就算排序不报错,最终rawdata1的内容也完全不符合预期。
正确改写方案
如果要使用map替换原有for循环,完全不需要手动调用append,直接让lambda返回拆分后的结果即可:
- 如果你需要对拆分后的结果排序,写法如下:
rawdata1 = sorted(map(lambda i: i.split('$$$'), rawdata))
- 如果你不需要排序(和原有for循环逻辑完全一致),写法如下:
rawdata1 = list(map(lambda i: i.split('$$$'), rawdata))
上述写法不需要提前初始化rawdata1为空列表,map迭代得到的拆分结果会直接被收集为新列表,逻辑和你原有的for循环完全等价。
内容的提问来源于stack exchange,提问作者Иван Лысиков
相关产品推荐
相关产品推荐

