5

Python で複数行のリストを理解するにはどうすればよいですか? 何かのようなもの:

[
  x for x in a:
    if check(x):
      ....
      #something multiline here
      ....
    else: 
      ....
      #something multiline here
      ....
]

もちろん、私は次のようなことができることを知っています:

def f(x):
  if check(x):
     ....
  else: 
     ....
 return x

map(a,f)

でも追加機能なしで欲しい。

出来ますか?

4

4 に答える 4

5

あなたが提案したようにそれを行うことはできないというのが私の理解です。

関数に名前を付けてリスト内包表記またはマップ関数を使用すると、提案したものと比較してはるかに読みやすくなります

于 2012-06-21T08:26:27.993 に答える
2

あなたが考えている方法ではできません。リスト内包表記には式のみを含めることができ、ステートメントは含めることができません。

于 2012-06-21T08:26:34.773 に答える
0

複数行のリスト内包表記を含めることができif、その中にステートメントを含めることができますが、構文は表示したものとは異なります。私はこれをインタプリタでテストしました:

>>> tuple = ('a','b','c','d','e','f','g','h','i','j')
>>> list = [letter for letter in tuple
...         if (letter != 'a' and letter != 'b')]
>>> list
['c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

他の方法でそれを壊すこともできますが、コードはもう少し厄介になります:

>>> list = [letter for letter in
...     tuple if (letter != 'j' and letter != 'i')]
>>> list
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

他の人が指摘したように、あなたはelseステートメントを使用しないかもしれません(ここでそれを機能させることができませんでした)。また、リスト内包表記が大きくなりすぎると、簡潔さが失われます(これが最大のポイントだと思います)。

于 2013-01-31T04:52:41.963 に答える