如果我有一个清单
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]
显然,目前还没有以这种方式实现,但目前的方法是不是比较冗长?为什么不能简化它?
答案 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。