有没有办法让列表理解这个条件集.
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]))
Run Code Online (Sandbox Code Playgroud)
如果它是单维列表,我可以用这种方式设置条件.
norm_sel = [i for i in normalize_data if i[0] > max_min_band[index_selec]]
Run Code Online (Sandbox Code Playgroud)
谢谢
这应该直接转化为列表理解:
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])]
Run Code Online (Sandbox Code Playgroud)
一般规则是(参见手册)您应该按照与使用一系列嵌套 for 循环和 if 语句完全相同的顺序编写列表理解。您唯一更改的是将 final 替换为xx.append(yy)
just yy
at the front of the list comprehension。另请注意,这本质上是一个很长的表达式,您可以写在很长的一行上。由于包含[]
,您可以将此表达式划分为多行,并带有任意缩进。
如果列表理解比原始理解更Pythonic,那就是品味问题。在这种情况下,嵌套很简单,所以我个人会选择列表理解。如果它变得更复杂,请坚持使用 for 循环。
正如 thefourtheye 所示,这个例子可以通过range()
直接迭代替换你的列表来进一步简化。
如果clamp_normalized
是列表列表,则可以不使用迭代range
,除非您需要索引.
clamp_sel = [j[0]
for i in clamp_normalized
for j in i
if j[0] < int(max_min_band[index_selec])]
Run Code Online (Sandbox Code Playgroud)