2013-02-09 2 views
-1

Я импортировал данные yahoo в список списков, чтобы каждый список имел все данные за каждый день. Я хочу использовать первую запись (дату) списка для абсциссы. Я провел много примеров, и многие из них используют словари, с которыми я не знаком. Я понял, что-то вроде этого:Как мне отобразить элементы списка?

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

будет работать, но это не так. По-видимому, data[:][0] просто даст вам первый список, а не первый элемент каждого списка. Я знаю, я мог бы просто сделать 2 новых списка всех дат и сказать цены акций с циклом for, но это кажется неправильным.

+0

Как вы получаете эти данные, можете ли вы опубликовать URL-адрес или что вы используете? – eLRuLL

+0

http://finance.yahoo.com/d/quotes.csv?s=GLD&f=snl1ohgdr, но это не имеет отношения к делу. В основном я хочу знать, есть ли у меня список списков, где каждый список [x, y] и хотите построить значения, могу ли я сделать это, не делая 2 новых списка только значений x и значений y. – user2057766

+0

Вы должны отредактировать теги своего вопроса, чтобы указать, какой язык вы используете (Python, я предполагаю), и какие библиотеки (matplotlib, pandas, whatever.) – DSM

ответ

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

Однако простой цикл делает то же самое в одном петля, поэтому нет необходимости в цикле дважды над data списка:

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

Даже если это не то, что вещий, он работает и является оригинальным. Он не должен чувствовать себя «неправильно» вообще.

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? –

+0

@Jon Clements Ошибка в коде, должна быть '' для el in izip (* li) ''. izip не строит все данные в объекте, он создает итератор. Но мой ответ глуп, я думаю, что ответ Маркуса Месканен правильный, я удалю мой – eyquem

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]) 
Смежные вопросы