2016-07-22 6 views
0

私はすべてのタイムゾーンをPythonのタプルに追加しようとしています。私は、このようにそれを行っている:すべてのタイムゾーンをpytzからタプルに追加する

ALL_TIMEZONES = (
    for idx, tz in enumerate(pytz.all_timezones): 
     (idx, (tz)), 
) 

しかし、私はときfor開始構文エラーを取得します。

どうしてそんなことができないのですか?私は反復を行う必要があります外部タプルと追加?

+0

私はあなたがここを見てお勧め:http://stackoverflow.com/documentation/python/196/comprehensions –

+0

あなたの本能が正しいこと、することはできませんタプルの中に*の形の* forループを入れてください。 – wwii

+0

'' 'どうしてそんなことができないの? '' ' - 言語はそれを許さないので。 – wwii

答えて

1

式が値を生成していないため、このようにすることはできません。

あなたはそれを達成するためにジェネレータ式を使用することができます。

ALL_TIMEZONES = tuple((idx, tz) for idx, tz in enumerate(pytz.all_timezones)) 
+0

リストの理解ではなく、[ジェネレータ表現](https://docs.python.org/3/glossary.html#term-generator-expression)を作成したと思います。 – wwii

+0

これはタプルを使用しているため真です。ありがとう。 – fips

+0

ええと、それは[ジェネレータ式](https://docs.python.org/3/reference/expressions.html#generator-expressions)です。なぜなら、 '' '... ...はカッコで囲まれているからです。括弧または中括弧 "" '' – wwii

1

enumerateは、あなたがそれを反復する際のタプルを生成イテレータを返します。 tuple()はイテレータを消費します。あなたの解決のためにそう...

>>> a = ['a','b','c'] 
>>> tuple(enumerate(a)) 
((0, 'a'), (1, 'b'), (2, 'c')) 
>>> 

tuple(enumerate(pytz.all_timezones)) 
関連する問題