如何绘制列表元素?

-1 投票
3 回答
10918 浏览
提问于 2025-04-17 15:22

我把雅虎的数据导入到了一个列表的列表里,这样每个子列表就包含了一天的所有数据。我想用每个子列表的第一个元素(日期)作为横坐标。看了很多例子,发现很多都用到了字典,而我对字典不太熟悉。我想像这样做:

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

这样应该可以,但实际上并不行。因为data[:][0]只会给你第一个子列表,而不是每个子列表的第一个元素。我知道我可以用一个循环创建两个新列表,一个存日期,另一个存股票价格,但这样做感觉不太对。

3 个回答

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')
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])
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 风格,但它依然有效,并且是独特的。这样做一点也不应该让你觉得“错误”。

撰写回答