python-3.x - Python 中列表的单行清理/操作

标签 python-3.x list

我是 Python 新手。

开头:bins = [.05, .1, .2, 1.0, -.35, .07, .1]

如何在 Python 中将以下代码压缩为一行?看起来应该是可以的,但是我尝试的时候却报错。注意:我不想在其他地方定义多行函数,然后在此处应用它 - 这只是在幕后隐藏多行代码。

bins_2 = [x for x in bins if x >= 0] # Retain only nonnegative reals.
bins_2.insert(0, 0.0) # Insert 0.0 to the beginning of the list
bins_2 = list(dict.fromkeys(bins_2)) # Dedup the list
bins_2.sort() # Sort bins into ascending order using the standard ordering of the integers

输出应为:bins_2 = [0.0, 0.05, 0.07, 0.1, 0.2, 1.0]

并不是说我反对使用多行代码(这可以帮助清晰)。但是,我认为如果我能弄清楚如何将此代码压缩为一行,那么我会更好地理解该语言中相关函数的总体情况。我也想认真对待运行时,所以我更愿意从 [0.0] 开始或附加,读取垃圾箱并过滤掉负数,删除列表中的重复项,然后以最有效的顺序对其进行排序。


我认为这个问题与这个问题背后的问题有关:Why does list.append() return None?

一开始,我尝试了:bins_2 = [0.0].extend([x for x in bins if x >= 0])

我也尝试过:

bins_2 = (list(dict.fromkeys(bins.insert(0, 0.0)))).sort()
bins_2 = [x for x in bins_2 if x >= 0]

都失败了。我认为这是由于像 insert()sort() 这样的函数修改了它们所应用到的列表,因此不应保存到另一个(或同名)变量。

最佳答案

如果我理解正确,你可以这样做:

x = sorted(set(v for v in bins if v >= 0) | {0.0})
print(x)

打印:

[0.0, 0.05, 0.07, 0.1, 0.2, 1.0]

对于不支持联合运算符的较低版本的Python:

x = sorted(set(v for v in bins if v >= 0).union([0.0]))
print(x)

关于python-3.x - Python 中列表的单行清理/操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75772034/

相关文章:

python-3.x - 在 python 中使用 selenium 禁用 webdriver 的控制台输出

python - 将掩码应用于多维数组

android - 从 Android 中的联系人 ID 获取联系人详细信息

python - 在 Python 中,如何根据另一个数字的符号更改列表中一个数字的符号?

Python 列表 - L1+=[5] 和 L1 = L1+[5] 的不同结果

python - 创建没有深拷贝的列表子类

python-3.x - 在 Python 中转置和乘法列表

python-3.x - Tensorflow 1.15/Keras 2.3.1 Model.train_on_batch() 返回的值多于输出/损失函数

python - 从网站结果中抓取表格为空

python - mypy Error TypeVar with Value Restriction and Union of Unions/Optional 无法传递通用容器类型