0

data2 ['C']は、次のようなリストです。

[['20120524', '26.31'], ['20120523', '26.08'], ['20120522', '26.52'], ['20120521', '25.75']]

d ['C'] [i] [0]を反復処理して、特定の値(YYYYMMDDとして格納されている日付)に対応するリストインデックスを見つけることができるコードを記述したいと思います。Pythonのforループのイディオムはまだ混乱しているので、コードの最初のブロックが無効であるのに、コードの2番目のブロックが有効である理由を明確にしたいと思います。また、私が説明した検索手順を実行する組み込みのPython関数がある場合は、共有してください。

動作しません:

>>> print data2['C'][i][0] for i in range(len(data2['C']))
 File "<stdin>", line 1
   print data2['C'][i][0] for i in range(len(data2['C']))
                           ^
SyntaxError: invalid syntax

作品:

>>> for i in range(len(data2['C'])):
...     print data2['C'][i][0]
... 
20120524
20120523
20120522
20120521
4

2 に答える 2

2

for2つの方法で使用できます:明示的なforループ(2番目のコードブロックなど)またはリスト/ディクト/ジェネレーターの理解(ドキュメント)

print [data2['C'][i][0] for i in range(len(data2['C']))]

角かっこに注意してください。[]リストを意味{}します-dictと()内部forで-ジェネレータ式。

2番目の出力と同じ出力にするには、次のようにします。

print '\n'.join([str(data2['C'][i][0]) for i in range(len(data2['C']))])

あるいは

print '\n'.join(str(data2['C'][i][0]) for i in range(len(data2['C'])))

これはジェネレータ式になります。

于 2012-05-26T19:28:03.063 に答える
0

問題は、最初のコードが悪いリスト内包であるが、2番目のコードが悪いイテレータであるということです。Pythonのforはイテレータであるため、次のように実行できます。

for i in data2['C']:
    print i[0]

また

dates = [i[0] for i in data2['C']]
print dates
于 2012-05-26T19:25:03.907 に答える