如何在Python中仅通过列表操作筛选第二列小于30的子列表?
解决列表筛选问题的纯列表操作方法
嘿,我来帮你搞定这个问题~你之前写的列表推导式出错的原因很简单:你在for循环里写了for x in len(A),但len(A)返回的是一个整数(这里是7),整数不是可迭代对象,而且就算能遍历,x会是单个数字,自然没法用x[1]去取子列表的元素啦。
下面给你两种纯列表操作的正确方法:
方法一:修正后的列表推导式
这是最常用也最直观的方式,直接遍历原列表A里的每个子列表,判断第二个元素是否小于30:
A = [ [0, 42, 2.6], [1, 20, 5.6], [2, 67, 3.5], [3, 12, 3.2], [4, 34, 1.1], [5, 74, 4.7], [6, 29, 2.9] ] B = [x for x in A if x[1] < 30] print(B)
运行后就能得到你想要的结果:[[1, 20, 5.6],[3, 12, 3.2],[6, 29, 2.9]]。
方法二:使用filter()函数
如果你喜欢函数式编程的风格,也可以用filter()配合匿名函数来实现:
B = list(filter(lambda x: x[1] < 30, A))
filter()会逐个把A中的子列表传给lambda函数,只保留满足x[1] < 30条件的元素,最后用list()把过滤后的结果转换成列表即可,效果和列表推导式完全一致。
内容的提问来源于stack exchange,提问作者urgeo
相关产品推荐
相关产品推荐

