从列表中选择满足条件的子列表元素

4
我有以下列表。
a = [['a', 'b', 1], ['c', 'b', 3], ['c','a', 4], ['a', 'd', 2]]

我正在尝试从列表中删除最后一个元素小于3的所有元素。因此,输出应如下所示:

a = [['c', 'b', 3], ['c','a', 4]]

我尝试以以下方式使用过滤器

list(filter(lambda x: x == [_, _, 2], a))

这里的下划线尝试表示该位置上的元素可以是任何内容。我习惯这种语法是因为在数学中常用,但我在Python中找不到类似的符号(在Python中是否甚至有这样的符号?)。

我更喜欢使用映射和过滤来解决问题,因为它们对我来说最直观。


1
list(filter(lambda x: x[-1] > 2, a)) - Ma0
3个回答

4

您应该在lambda中使用x[-1] >= 3,以保留所有最后一个值大于或等于3的子列表:

>>> a = [['a', 'b', 1], ['c', 'b', 3], ['c','a', 4], ['a', 'd', 2]]
>>> list(filter(lambda x: x[-1] >= 3, a))
[['c', 'b', 3], ['c', 'a', 4]]

谢谢,太简单了。现在有什么简单的方法可以删除最后一个元素吗?即从[['c','b',3],['c','a',4]]获取[['c','b'],['c','a']]? - Harto Saarinen
应该这样写:for i in lst: del i[-1] - Austin

1
列表推导式方法:
a_new = [sublist for sublist in a if sublist[-1] >= 3]

你需要将那个 < 改成 >= - Aran-Fey
2
OP 说了“..最后一个元素”,所以使用sublist[-1]会更加安全。 - Ma0
< should be >= - Mohammad Azim

0
a = [['a', 'b', 1], ['c', 'b', 3], ['c','a', 4], ['a', 'd', 2]]

使用列表推导式对上述列表进行过滤,如下所示:
b = [x for x in a if x[-1] >= 3]

1
请不要只是把代码放下而已。请解释你所做的事情以及原因。这里有许多不同的方法,为什么我们应该选择这个而不是另一个呢? - Scriptable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接