过滤列表更简洁的方法?

时间:2017-10-11 02:48:00

标签: python filtering

如果我有一个清单

a=[4, 5, 6]

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

[i for i in a if a<6]

现在我刚刚介绍了数据帧,其中包含像

这样的数据帧
df = pd.DataFrame({'a':[4, 5, 6], 'b':[7, 1, 2]})

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

df[df['a']<6]

这似乎更简洁,也许不那么令人困惑(一旦你习惯了),而不是过滤列表的方式。无法通过简单地在[]中指定条件来应用列表过滤器,例如

a[<6]

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

3 个答案:

答案 0 :(得分:1)

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

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

这看起来很棒,但我仍然对列表理解情有独钟。

答案 1 :(得分:1)

你不能完全具备你要求的语法,但是如果你想创建自己的列表类,你可以有一个简洁的方法:

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]

答案 2 :(得分:0)

是的,可以构建python语言,以便a[<6]完成你想要的过滤,但是每个python程序员和每个python编译器都必须学习这种特殊语法,只是为了节省一些源代码。特殊情况:&gt;,&gt; =,==,&lt; =,&lt;。

Pandas会像你展示的那样做,但它是为大量的数值分析而构建的,所以语法糖可能更值得花费。此外,大熊猫倾向于提供大量由R语言启发的语法糖,因此它不是非常惯用的python。