-1

Python では以下のような構文があるため:

for i in range(10):
     print 'Hello!' if i % 3 == 0 else 'Waiting' if i % 3 == 1 else 'Bye!'

次のような出力が作成されます。

Hello!
Waiting
Bye!
Hello!
Waiting
Bye!
Hello!
Waiting
Bye!
Hello!

また、これもあります:

a = tuple('a member' for i in range(10) if i % 3 == 0)

それはタプルを次のようにします('a member', 'a member', 'a member', 'a member')

今、私は知りたいのですが、次のようなものがあります:

a = tuple('a member' for i in range(10) if i % 3 == 0 else 'another member')?

を追加するelse 'another member'と SyntaxError Exception で失敗 するため

ここにpythonコンソール出力があります:

>>> a = tuple('a member' for i in range(10) if i % 3 == 0 else 'another member')
  File "<stdin>", line 1
    a = tuple('a member' for i in range(10) if i % 3 == 0 else 'another member')
                                                             ^
SyntaxError: invalid syntax

(私はちょうど sth のように 1 行だけを書きたい:

a = tuple('Hello!' for i in range(10) if i % 3 == 0 else 'Waiting' if i % 3 == 1 else 'Bye!')

そのメンバーが最初の例の行であるタプルを残してください

また、コードがpython 2または3であっても、両方を使用して仕事をすることができるので、問題はありません;))

4

3 に答える 3

3

forこれを試してください(ステートメントの前に条件を持ってくる必要があります):

tuple('Hello!' if i % 3 == 0 else 'Waiting' if i % 3 == 1 else 'Bye!' for i in range(10))

を使用して、少し明確にしitertoolsます。

from itertools import cycle, islice
tuple(islice(cycle(('Hello!', 'Waiting', 'Bye!')), 10))
于 2013-08-05T01:54:57.700 に答える
0

リスト内包表記またはジェネレーター式では、データを変更するときに条件が左側に配置され、項目をフィルター処理するために条件が右側に配置されます。

>>> tuple('Hello!' if i % 3 == 0 else 'Waiting' if i % 3 == 1 else 'Bye!' 
                                                      for i in xrange(10))
('Hello!', 'Waiting', 'Bye!', 'Hello!', 'Waiting', 'Bye!', 'Hello!', 'Waiting', 'Bye!', 'Hello!')

上記のコードの読み取り可能なバージョン:

>>> lis  = ['Hello!', 'Waiting' ,'Bye!']
>>> tuple( lis[i%3] for i in xrange(10) )
('Hello!', 'Waiting', 'Bye!', 'Hello!', 'Waiting', 'Bye!', 'Hello!', 'Waiting', 'Bye!', 'Hello!')
#or
>>> from itertools import cycle
>>> cyc = cycle(lis)
>>> tuple(next(cyc) for _ in xrange(10))
('Hello!', 'Waiting', 'Bye!', 'Hello!', 'Waiting', 'Bye!', 'Hello!', 'Waiting', 'Bye!', 'Hello!')
于 2013-08-05T01:54:55.850 に答える