4

三元反復は可能ですか?この特定の例はより良い方法で行うことができますが、私が意味するものの単純化したバージョン:

c = 0  
list1 = [4, 6, 7, 3, 4, 5, 3, 4]  
c += 1 if 4 == i for i in list1 else 0  

より実用的な例:

strList = ['Ulis', 'Tolus', 'Utah', 'Ralf', 'Chair']
counter = 0  
counter += 1 if True == i.startswith('U') for i in strList else 0  
return counter  
4

3 に答える 3

6

あなたの「実際の例」は次のように書かれています。

>>> strList = ['Ulis', 'Tolus', 'Utah', 'Ralf', 'Chair']
>>> sum(1 for el in strList if el.startswith('U'))
2

他の例(私が正しく理解している場合)は次のとおりです。

>>> list1 = [4, 6, 7, 3, 4, 5, 3, 4]
>>> list1.count(4)
3

(または単に例を適応させstrListますが、組み込みのメソッドを使用しても問題はありません)

于 2013-02-01T02:44:05.177 に答える
1

@Jon Clements が優れた回答を提供してくれました。Python のイディオムを使用して問題を解決する方法です。他の Python プログラマーが彼のコードを見れば、すぐに理解できるでしょう。これは、Python を使用して行う正しい方法です。

実際の質問に答えるには: いいえ、それは機能しません。三項演算子の形式は次のとおりです。

expr1 if condition else expr2

conditionに評価されるものでなければなりませんbool。三項式はexpr1andexpr2の 1 つを選択し、それだけです。

驚いたような表現を試してみたc += 1 if condition else 0ところ、うまくいき、この回答の最初のバージョンで指摘しました。@TokenMacGuy は、実際に何が起こっているかを指摘しました。

c += (1 if condition else 0)

したがって、ある種のループの代わりに適切な条件を設定したとしても、実行しようとしていたことを実行することはできません。上記のケースは機能しますが、次のようなものは失敗します。

c += 1 if condition else x += 2  # syntax error on x += 2

これは、Python が代入ステートメントを式と見なさないためです。

次のよくある間違いを犯すことはできません。

if x = 3:  # syntax error!  Cannot put assignment statement here
    print("x: {}".format(x))

ここでプログラマーはおそらくx == 3値をテストしたかったのですが、 と入力しましたx = 3。Python は、代入を式と見なさないことで、この間違いを防ぎます。

間違えてもいけませんし、わざとやってもいけません。

于 2013-02-01T03:01:39.600 に答える
0

リスト内包表記でアイテムを選択し、リスト内の要素の数を取得することもできます。

strList = ['Ulis', 'Tolus', 'Utah', 'Ralf', 'Chair']
len([k for k in strList if k.startswith('U')])
于 2013-02-01T02:52:17.830 に答える