筛选列表的更简洁的方法?

2024-03-28 13:13:48 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有名单

a=[4, 5, 6]

据我所知,最简单的过滤方法是:

[i for i in a if a<6]

现在我刚刚介绍了dataframes,对于像

df = pd.DataFrame({'a':[4, 5, 6], 'b':[7, 1, 2]})

我可以通过指定元素和条件来应用(行)筛选器:

df[df['a']<6]

这似乎比过滤列表的方法更简洁,也可能更容易混淆(一旦你习惯了)。无法通过简单地在[]中指定条件来应用列表筛选器,如

a[<6]

显然,它目前没有以这种方式实现,但是当前的方法不是比较冗长吗?为什么不能简化?你知道吗


Tags: 方法in元素dataframedf列表forif
3条回答

您不能完全掌握所需的语法,但是如果您想创建自己的列表类,可以使用一个同样简洁的列表类:

class List(list):
    def __lt__(self, other):
        return List(i for i in self if i < other)

a = List([4,5,6])
b = a < 6
assert b == [4,5]

是的,可以构建python语言,以便a[<6]执行所需的筛选,但是每个python程序员和每个python编译器都必须学习这种特殊语法,以便在一些特殊情况下保存一点源代码:>;、>;=、=、<;=、<;。你知道吗

正如你所展示的,Pandas做了一些类似的事情,但是它是为大量的数值分析而构建的,因此语法糖可能更值得花费。另外,pandas倾向于提供大量受R语言启发的语法,因此它不是非常地道的python。你知道吗

你有上面最简单的方法。但是,您可以使用以下方法

filtered_list = filter(lambda k: k < 6, original_list)

这看起来不错,但我仍然有一个软点的名单理解。你知道吗

相关问题 更多 >