2012-05-26 52 views
0

DATA2 [ 'C']是看起來像的列表:的Python的列表列表成語

[['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 
+0

「如果有一個內置的Python函數將...」這怎麼樣:'在data2 ['C'] s:print s [0]'?如果你以後需要'i':'對於i,枚舉數據(data2 ['C']):print i,s [0]' – Arka

回答

2

for可以有兩種使用方式:在顯for環(像你的第二個代碼塊)或在列表/字典/發電機理解(docs)

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']))) 

這將是一個generator expression

0

的問題是第一個代碼是一個壞list comprehension但第二個是壞的迭代器。在Python中for是一個迭代器,所以,你可以這樣做:

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

dates = [i[0] for i in data2['C']] 
print dates 
+0

這根本行不通。 range()返回從0到len(X)-1(包括邊框)的整數列表。我[0]在這方面沒有意義。 –

+0

你是對的我改變了代碼。 – diegueus9