如何用单行Python代码完成指定列表的清洗与操作?
单行实现方案
针对你的需求,这里提供两种高效的单行实现方式,都能达成预期效果:
方法一:匹配原步骤逻辑(保留插入顺序去重后排序)
bins = [.05, .1, .2, 1.0, -.35, .07, .1] bins_2 = sorted(list(dict.fromkeys([0.0] + [x for x in bins if x >= 0])))
方法二:更简洁的集合去重排序
bins = [.05, .1, .2, 1.0, -.35, .07, .1] bins_2 = sorted({0.0} | {x for x in bins if x >= 0})
你的尝试失败的核心原因
你用[0.0].extend([x for x in bins if x >= 0])这类写法失败,是因为extend()、insert()、sort()这类列表方法属于原地修改操作,它们的返回值是None,直接赋值的话变量会被设为None,而非处理后的列表。
代码逻辑拆解
以方法一为例:
[x for x in bins if x >= 0]:过滤出列表中的非负元素,得到[0.05, 0.1, 0.2, 1.0, 0.07, 0.1][0.0] + ...:将0.0合并到过滤后的列表开头,得到[0.0, 0.05, 0.1, 0.2, 1.0, 0.07, 0.1]dict.fromkeys(...):利用字典键的唯一性去重,同时保留元素首次出现的顺序(Python 3.7+特性)list(...):将字典键转换为列表sorted(...):对列表升序排序,返回新的有序列表并赋值给bins_2
方法二则是通过集合并集完成去重(集合自动去重),再用sorted()排序得到有序列表,逻辑更简洁。
两种方法最终都会得到预期输出:[0.0, 0.05, 0.07, 0.1, 0.2, 1.0]
内容的提问来源于stack exchange,提问作者Hyperi
相关产品推荐
相关产品推荐

