给出以下列表清单:
[[0.074,0.073,0.072,0.03,0.029,0.024,0.021,0.02],[0.02,0.02,0.015],[0.026,0.026,0.02,0.02,0.02,0.015],[0.021,0.021,0.02] ,0.017],[0.077,0.076,0.074,0.055,0.045,0.021],[0.053,0.052,0.051,0.023,0.022],[0.016,0.016]]
我如何在列表中循环并从子列表中的每个子列表#2中取出#1,从每个子列表中取出#3,并生成单独的列表。
例如,在这种情况下,#1应包括0.074,0.02,0.026,0.021,0.077,0.063和0.016。它们将在一个单独的列表中。
我使用了while循环,但它对我不起作用:
a=0
b=len(data['stock'])
while a<=b - 1:
print data['stock'][a][0]
a = a + 1
print "\n"
while a<=b - 1:
print data['stock'][a][1]
a = a + 1
print "\n"
while a<=b - 1:
print data['stock'][a][2]
a = a + 1
print "\n"
while a<=b - 1:
print data['stock'][a][3]
a = a + 1
print "\n"
while a<=b - 1:
print data['stock'][a][4]
a = a + 1
print "\n"
while a<=b - 1:
print data['stock'][a][5]
a = a + 1
print "\n"
while a<=b - 1:
print data['stock'][a][6]
a = a + 1
print "\n"
我有多少解决这个问题并根据上述逻辑创建列表?
答案 0 :(得分:2)
您可以使用itemgetter
:
>>> from operator import itemgetter
>>> map(itemgetter(0), data)
[0.074, 0.02, 0.026, 0.021, 0.077, 0.053, 0.016]
>>> map(itemgetter(1), data)
[0.073, 0.02, 0.026, 0.021, 0.076, 0.052, 0.016]
您还可以使用列表推导(可能更具可读性):
>>> [l[0] for l in data]
[0.074, 0.02, 0.026, 0.021, 0.077, 0.053, 0.016]
答案 1 :(得分:1)
转置列表的一种方法是使用zip
:
>>> data = [[1,2,3],[4,5,6]]
>>> zip(*data)
[(1, 4), (2, 5), (3, 6)]
要解决数据形状不一致的问题,您可以使用izip_longest
:
>>> data = [[0.074, 0.073, 0.072, 0.03, 0.029, 0.024, 0.021, 0.02], [0.02, 0.02, 0.015], [0.026, 0.026, 0.02, 0.02, 0.02, 0.015], [0.021, 0.021, 0.02, 0.017], [0.077, 0.076, 0.074, 0.055, 0.045, 0.021], [0.053, 0.052, 0.051, 0.023, 0.022], [0.016, 0.016]]
>>> from itertools import izip_longest
>>> izip_longest(*data)
<itertools.izip_longest object at 0x101d77c00>
>>> list(izip_longest(*data))
[(0.074, 0.02, 0.026, 0.021, 0.077, 0.053, 0.016), (0.073, 0.02, 0.026, 0.021, 0.076, 0.052, 0.016), (0.072, 0.015, 0.02, 0.02, 0.074, 0.051, None), (0.03, None, 0.02, 0.017, 0.055, 0.023, None), (0.029, None, 0.02, None, 0.045, 0.022, None), (0.024, None, 0.015, None, 0.021, None, None), (0.021, None, None, None, None, None, None), (0.02, None, None, None, None, None, None)]
因此:
>>> columns = list(izip_longest(*data))
>>> columns[0]
(0.074, 0.02, 0.026, 0.021, 0.077, 0.053, 0.016)
>>> columns[1]
(0.073, 0.02, 0.026, 0.021, 0.076, 0.052, 0.016)
>>> columns[2]
(0.072, 0.015, 0.02, 0.02, 0.074, 0.051, None)
我不确定你想要为“#3”做什么 - 你的最后一个子列表只有两个元素。 izip_longest
有一个fillvalue
选项,可用于指定要执行的操作,默认为None
(这就是columns[2]
中最后一个条目为None
的原因)