gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:57:10 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com