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

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])]
于 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 ステートメントを使用する場合とまったく同じ順序でリスト内包表記を記述する必要があるということです。変更する唯一のことは、リスト内包表記の先頭にある最終xx.append(yy)形を置き換えることです。yyまた、これは本質的に非常に長い行に記述できる 1 つの長い式であることに注意してください。で囲まれているため、[]任意のインデントを使用して、この式を複数の行に分割できます。

リスト内包表記がオリジナルよりもPythonicであるかどうかは好みの問題です。この場合、ネストは簡単なので、個人的にはリスト内包表記を使用します。より複雑になる場合は、for ループを使用してください。

thefourthey が示すように、この例は、の使用をrange()リストの直接反復に置き換えることでさらに単純化できます。

于 2013-10-13T14:03:18.703 に答える