1

有没有办法让列表理解这个条件集。

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]))

如果是单维列表,我可以这样设置条件。

norm_sel = [i for i in normalize_data if i[0] > max_min_band[index_selec]]

谢谢

4

2 回答 2

6

Ifclamp_normalized是一个列表的列表,您可以不使用 进行迭代range,除非您需要索引。

clamp_sel  = [j[0]
                  for i in clamp_normalized
                  for j in i
                  if j[0] < int(max_min_band[index_selec])]
于 2013-10-13T14:03:24.987 回答
5

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

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])]

一般规则是(参见手册),您应该按照与一系列嵌套 for 循环和 if 语句完全相同的顺序编写列表理解。您唯一更改的是将 final 替换为xx.append(yy)yy在列表理解的前面。还要注意,这本质上是一个很长的表达式,你可以写在很长的一行上。由于封闭[],您可以将此表达式划分为多行,并具有任意缩进。

如果列表理解比原始的更Pythonic是一个品味问题。在这种情况下,嵌套很简单,所以我个人会选择列表理解。如果它变得更复杂,请坚持使用 for 循环。

正如 thefourtheye 所示,这个例子可以通过range()直接迭代你的列表来进一步简化。

于 2013-10-13T14:03:18.703 回答