Python 将嵌套循环和条件转换为列表

Python 将嵌套循环和条件转换为列表,python,list,Python,List,是否有一种方法可以让列表理解此条件集 clamp_sel = list() for i in range(0, len(clamp_normalized)): for j in range(0, len(clamp_normalized[i])): if clamp_normalized[i][j][0] < int(max_min_band[index_selec]): clamp_sel.a

是否有一种方法可以让列表理解此条件集

clamp_sel = list()
for i in range(0, len(clamp_normalized)):
        for j in range(0, len(clamp_normalized[i])):
                if clamp_normalized[i][j][0] < int(max_min_band[index_selec]):
                        clamp_sel.append(int(clamp_normalized[i][j][0]))

谢谢

这应该直接转化为列表理解:

clamp_sel = [int(clamp_normalized[i][j][0])
    for i in range(0, len(clamp_normalized))
    for j in range(0, len(clamp_normalized[i]))
    if clamp_normalized[i][j][0] < int(max_min_band[index_selec])]
clamp_sel=[int(clamp_归一化[i][j][0])
对于范围内的i(0,len(钳位_归一化))
对于范围内的j(0,len(钳位_归一化[i]))
如果钳位标准化[i][j][0]
一般规则是(请参阅)应该按照与一系列嵌套for循环和if语句完全相同的顺序编写列表理解。您唯一需要更改的是将最后的
xx.append(yy)
替换为列表前面的
yy
。还要注意,这本质上是一个长表达式,您可以在非常长的行上编写。由于包含
[]
,因此可以将此表达式拆分为多行,并进行任意缩进

如果列表的理解比原始的更像蟒蛇,那就是一个品味的问题。在本例中,嵌套非常简单,因此我个人会选择列表理解。如果它变得更复杂,请坚持使用for循环


如图4所示,可以通过在列表上直接迭代来替代
range()
的使用来进一步简化此示例。

这应该直接转化为列表理解:

clamp_sel = [int(clamp_normalized[i][j][0])
    for i in range(0, len(clamp_normalized))
    for j in range(0, len(clamp_normalized[i]))
    if clamp_normalized[i][j][0] < int(max_min_band[index_selec])]
clamp_sel=[int(clamp_归一化[i][j][0])
对于范围内的i(0,len(钳位_归一化))
对于范围内的j(0,len(钳位_归一化[i]))
如果钳位标准化[i][j][0]
一般规则是(请参阅)应该按照与一系列嵌套for循环和if语句完全相同的顺序编写列表理解。您唯一需要更改的是将最后的
xx.append(yy)
替换为列表前面的
yy
。还要注意,这本质上是一个长表达式,您可以在非常长的行上编写。由于包含
[]
,因此可以将此表达式拆分为多行,并进行任意缩进

如果列表的理解比原始的更像蟒蛇,那就是一个品味的问题。在本例中,嵌套非常简单,因此我个人会选择列表理解。如果它变得更复杂,请坚持使用for循环


如图4所示,这个例子可以通过在列表上直接迭代来代替
range()
的使用来进一步简化。

如果
climp\u normalized
是列表列表,除非需要索引,否则可以不使用
range
进行迭代

clamp_sel  = [j[0]
                  for i in clamp_normalized
                  for j in i
                  if j[0] < int(max_min_band[index_selec])]
clamp_sel=[j[0]
因为我在夹钳里
对于j in i
如果j[0]
如果
clamp\u normalized
是一个列表列表,除非需要索引,否则可以不使用
范围进行迭代

clamp_sel  = [j[0]
                  for i in clamp_normalized
                  for j in i
                  if j[0] < int(max_min_band[index_selec])]
clamp_sel=[j[0]
因为我在夹钳里
对于j in i
如果j[0]
看起来很复杂,但列表理解仍然很复杂。@GamesBrainiac:使用lamda@pistal我不这么认为。你做了很多循环,所以是的,没有太多。看起来很复杂,但列表理解仍然很复杂。@GamesBrainiac:使用lamda@pistal我不这么认为。你做了很多循环,所以是的,不多。