2013-02-09 57 views
-1

我已將雅虎數據導入到列表中,以便每個列表都包含每天的所有數據。我想使用列表的第一個條目(日期條目)作爲橫座標。我經歷了很多例子,很多使用了我不熟悉的字典。我想是這樣的:如何繪製列表的元素?

chart.plot(data[:][0], data[:][1])

會工作,但事實並非如此。顯然,data[:][0]只會給你第一個列表,而不是每個列表的第一個元素。我知道,我可以製作所有日期的2個新列表,並用for循環說股價,但這似乎是錯誤的。

+0

您如何獲取這些數據,您可以發佈網址或您使用的是什麼? – eLRuLL 2013-02-09 22:28:05

+0

http://finance.yahoo.com/d/quotes.csv?s=GLD&f=snl1ohgdr但這不相關。基本上我想知道,如果我有一份列表,其中每個列表是[x,y],並且想要繪製這些值,我可以做到這一點,而不用創建2個只包含x值和y值的新列表。 – user2057766 2013-02-09 22:39:21

+0

你應該編輯你的問題的標籤,以包括你正在使用的語言(Python,我假設)以及哪些庫(matplotlib,pandas,無論如何)。 – DSM 2013-02-09 22:47:14

回答

2

讓每一個列表的n個元素列表中,你可以使用列表理解:

#nth_elements = [l[n] for l in data] 
#for example: 
x_list = [l[0] for l in data] 
y_list = [l[1] for l in data] 

現在,您可以撥打chart.plot(x_list, y_list)


如果你不喜歡的「額外」的變量,你可以直接在函數調用中使用列表理解:

chart.plot([l[0] for l in data], [l[1] for l in data]) 

但是一個簡單的for循環做在一個相同環,所以無需循環在你的data列表兩次:

x_list = [] 
y_list = [] 
for l in data: 
    x_list.append(l[0]) 
    y_list.append(l[1]) 

即使它不是Python的,它的工作原理並且是原創的。它根本不應該感覺「錯誤」。

0

您對此感興趣嗎? :

li = [["GLD","SPDR Gold Trust", 
     '161.57','161.47','162.02','161.20','0.00','N/A'], 

     ["SLV","iShares Silver Trust", 
     '30.29','30.65','25.34','36.44','0.00','N/A'], 

     ["GDX","Market Vectors Gold Miners ETF", 
     '42.31','42.77','39.08','57.91','0.00','N/A']] 

from itertools import izip 

for el in zip(*li): 
    print el 

顯示

('GLD', 'SLV', 'GDX') 
('SPDR Gold Trust', 'iShares Silver Trust', 'Market Vectors Gold Miners ETF') 
('161.57', '30.29', '42.31') 
('161.47', '30.65', '42.77') 
('162.02', '25.34', '39.08') 
('161.20', '36.44', '57.91') 
('0.00', '0.00', '0.00') 
('N/A', 'N/A', 'N/A') 
+1

爲什麼要導入izip? – 2013-02-10 00:01:58

+0

@Jon Clements在代碼中的錯誤,應該是「izip(* li)」中的el。 izip不建立一個對象中的所有數據,它會創建一個迭代器.-但我的答案是愚蠢的,我認爲Markus Meskanen的答案是正確的,我將刪除我的 – eyquem 2013-02-10 00:29:06

0

data[:]只得到列表中的data所有元素。這與做data[1:4]的過程相同,該過程從1開始並結束到4:[1, 2, 3]

要做點什麼對於列表中的每個元素,都需要使用for循環。

list1, list2 = [], [] 
for list in data: 
    list1.append(list[0]) 
    list2.append(list[1])