Python 以智能方式筛选列表列表

Python 以智能方式筛选列表列表,python,Python,我有以下格式的列表 a = [[1,...,255],[1,...,255],...,[1,...,255]] i、 e.任意长度的列表,包含固定长度255的整数列表。 (固定长度列表的值是来自“真实世界”的数据,而不是本例中的整数1到255。) 现在,我想过滤掉所有内部列表(长度为255)中的所有值,如果它们的值高于某个阈值,则将它们设置为0 有没有一种不必编写两个for循环就可以完成此操作的智能方法?您可以使用numpy轻松完成此操作: import numpy as np a = [r

我有以下格式的列表

a = [[1,...,255],[1,...,255],...,[1,...,255]]
i、 e.任意长度的列表,包含固定长度255的整数列表。 (固定长度列表的值是来自“真实世界”的数据,而不是本例中的整数1到255。)

现在,我想过滤掉所有内部列表(长度为255)中的所有值,如果它们的值高于某个阈值,则将它们设置为
0


有没有一种不必编写两个for循环就可以完成此操作的智能方法?

您可以使用
numpy
轻松完成此操作:

import numpy as np

a = [range(255) for _ in range(10)]
np_a = np.array(a)    
# set all values above 200 to 0
np_a[np_a > 200] = 0
# np_a now contains the data with all values above 200 changed to 0

# if you needed to convert the numpy array back to a python list
a = np_a.tolist()
输出以显示其工作

In [209]: np_a
Out[209]:
array([[  0,   1,   2, ..., 252, 253, 254],
       [  0,   1,   2, ..., 252, 253, 254],
       [  0,   1,   2, ..., 252, 253, 254],
       ...,
       [  0,   1,   2, ..., 252, 253, 254],
       [  0,   1,   2, ..., 252, 253, 254],
       [  0,   1,   2, ..., 252, 253, 254]])

In [210]: np_a[np_a > 252]  = 0

In [211]: np_a
Out[211]:
array([[  0,   1,   2, ..., 252,   0,   0],
       [  0,   1,   2, ..., 252,   0,   0],
       [  0,   1,   2, ..., 252,   0,   0],
       ...,
       [  0,   1,   2, ..., 252,   0,   0],
       [  0,   1,   2, ..., 252,   0,   0],
       [  0,   1,   2, ..., 252,   0,   0]])

您可以使用
numpy
非常轻松地执行此操作:

import numpy as np

a = [range(255) for _ in range(10)]
np_a = np.array(a)    
# set all values above 200 to 0
np_a[np_a > 200] = 0
# np_a now contains the data with all values above 200 changed to 0

# if you needed to convert the numpy array back to a python list
a = np_a.tolist()
输出以显示其工作

In [209]: np_a
Out[209]:
array([[  0,   1,   2, ..., 252, 253, 254],
       [  0,   1,   2, ..., 252, 253, 254],
       [  0,   1,   2, ..., 252, 253, 254],
       ...,
       [  0,   1,   2, ..., 252, 253, 254],
       [  0,   1,   2, ..., 252, 253, 254],
       [  0,   1,   2, ..., 252, 253, 254]])

In [210]: np_a[np_a > 252]  = 0

In [211]: np_a
Out[211]:
array([[  0,   1,   2, ..., 252,   0,   0],
       [  0,   1,   2, ..., 252,   0,   0],
       [  0,   1,   2, ..., 252,   0,   0],
       ...,
       [  0,   1,   2, ..., 252,   0,   0],
       [  0,   1,   2, ..., 252,   0,   0],
       [  0,   1,   2, ..., 252,   0,   0]])

变体1:对于,仅1个
,例如:

dst = []
for s in src:
    dst.append([x if x < 3 else 0 for x in s])

变体1:对于
,仅1个
,例如:

dst = []
for s in src:
    dst.append([x if x < 3 else 0 for x in s])

你能详细说明你所说的“过滤掉”是什么意思吗。如果在嵌套列表中发现某个值高于某个值,该子列表是否会被置零?或者它是一个内部列表的sum()。他想把它设为零。你能扩展一下“过滤掉”是什么意思吗。如果在嵌套列表中发现某个值高于某个值,该子列表是否会被置零?或者它是一个内部列表的sum()。他想把它设为零。我刚试过,但没有定义“npa”。我对看到结果很感兴趣。@sotapme——这是一个输入错误,请尝试使用
np\u a
好的解决方案。这就是你想要的。我刚试过,但“npa”没有定义。我对看到结果很感兴趣。@sotapme——这是一个输入错误,请尝试使用
np\u a
好的解决方案。这就是你想要的结果。for循环的列表理解如何?@MattiLyra抱歉,我不太明白你的问题。如果“for”循环,你的意思是列表理解是隐式的吗?是的,列表理解是循环的,只是语法上更好。你是对的。但是numpy的潜在机制呢?假设它也在使用循环。这只是“循环将在何处执行”的问题。如果OP担心速度,我的解决方案不是最优的,我知道。for循环的列表理解如何?@MattiLyra抱歉,我不确定是否理解您的问题。如果“for”循环,你的意思是列表理解是隐式的吗?是的,列表理解是循环的,只是语法上更好。你是对的。但是numpy的潜在机制呢?假设它也在使用循环。这只是“将在哪里执行循环”的问题。如果OP担心速度,我的解决方案不是最优的,我知道这一点。