0

次のリストのリストが与えられます。

[[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.0.1] 、[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]]

リストを循環して、各サブリストから #1、各サブリストから #2、各サブリストから #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"

この問題を解決し、上記のロジックに基づいてリストを作成するのはいくつですか?

4

2 に答える 2

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]
于 2012-12-16T03:57:23.003 に答える
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」に対して何をしたいのかわかりません。最後のサブリストには 2 つの要素しかありません。 izip_longestには、fillvalue何をするかを指定するために使用できるオプションがあり、デフォルトはNoneです (これが の最後のエントリが である理由columns[2]ですNone)。

于 2012-12-16T04:05:50.000 に答える