过滤0的嵌套列表
Posted
技术标签:
【中文标题】过滤0的嵌套列表【英文标题】:Filtering a nested list of 0 【发布时间】:2021-07-10 12:41:39 【问题描述】:我正在尝试过滤嵌套的值列表以删除 0,这样我就可以计算没有 0 的最小值。
data = [[0, 723, 124,],[4084, 208, 32, 4 ], [ 413, 277, 0, 154], [], [211, 132,0, 54]]
我试过了:
for i in data:
new_values = []
mins = min((i), default=0)
if mins == 0:
new_values = (filter(lambda x: x !=0, data))
print(new_values)
它给了我:
[]
<filter object at 0x040D4130>
[]
[]
[]
[]
<filter object at 0x040D40F0>
[]
[]
[]
[]
<filter object at 0x040D4130>
预期代码:
data = [[723, 124,],[4084, 208, 32, 4 ], [ 413, 277, 154], [], [211, 132, 54]]
预期输出:
mins = (124, 4,154,0,54)
【问题讨论】:
这段代码的预期输出是什么?[list(filter(lambda x: x !=0, i)) for i in data]
代码为您提供没有 0 值元素的列表
当我尝试它给了我空的 [] 列表时,它上面有过滤器对象,它有完整的列表。
[min(list(filter(lambda x: x !=0, i))) for i in data if len(i)]
补充 @VivekSable 答案
谢谢。我一直忘记数据中 i 的嵌套循环位等。现在我只需要弄清楚当嵌套列表为空 [] 时要在嵌套列表中做什么。我需要它给出一个 0。这样它就会从最小列表中消失。
【参考方案1】:
-
我们必须遍历输入列表。
通过过滤器和 lambda 函数从每个输入数据项中删除零值。 link
从非零项中获取最小值,如果没有项则默认为 0,即
min((new_i), default=0)
将步骤 3 的结果附加到输出变量,即mins
代码:-
data = [[0, 723, 124,],[4084, 208, 32, 4 ], [ 413, 277, 0, 154], [], [211, 132,0, 54]]
mins = []
for i in data:
new_i = list(filter(lambda x: x !=0, i))
mins.append(min((new_i), default=0))
print(mins)
与综合列表相同的代码 -
mins = [ min(filter(lambda x: x !=0, i), default=0)
for i in data]
【讨论】:
【参考方案2】:Vivek Sable 答案的一个简单变体是
list(map(lambda x: min((val for val in x if val != 0), default=0), data))
【讨论】:
以上是关于过滤0的嵌套列表的主要内容,如果未能解决你的问题,请参考以下文章
如何使用映射或过滤器而不是列表推导过滤特定值的嵌套字典(pythonic 方式)?