0

data2['C'] 是一个如下所示的列表:

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

我想编写可以遍历 d['C'][i][0] 并找到与特定值(存储为 YYYYMMDD 的日期)对应的列表索引的代码。我仍然觉得 Python 的 for 循环习语令人困惑,并想澄清为什么第一个代码块无效但第二个代码块有效。另外,如果有一个内置的 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

for可以以两种方式使用:在显式for循环中(如您的第二个代码块)或在列表/字典/生成器理解(文档)中:

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

注意括号。[]表示列表,{}- 一个字典和()内部for- 一个生成器表达式。

要使输出与第二个相同,请执行

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

问题是第一个代码是一个糟糕的列表理解,但第二个代码是一个糟糕的迭代器。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 回答