9

zip() を使用する次の python コードがあり、意図しないデータの切り捨てが発生するようです。

inc_data = [[u'Period Ending', u'Dec 31, 2012', u'Dec 31, 2011', u'Dec 31, 2010'],
            [u'Total Revenue\n', u'104,507,100\n', u'106,916,100\n', u'99,870,100\n'],
            [u'Cost of Revenue\n',u'56,000,000\n']
            ]

inc_data2 = zip(*inc_data)
for i in inc_data2:
    print i

それは印刷するだけです:

(u'Period Ending', u'Total Revenue\n', u'Cost of Revenue\n')
(u'Dec 31, 2012', u'104,507,100\n', u'56,000,000\n')

しかし、次のように出力したいのですが、どうやらu''zip() が inc_data を切り捨てるのを防ぐために、手動でフィラーを追加する必要があるようです。しかし、それをコーディングする方法がわかりません。

(u'Period Ending', u'Total Revenue\n', u'Cost of Revenue\n')
(u'Dec 31, 2012', u'104,507,100\n', u'56,000,000\n')
(u'Dec 31, 2011', u'106,916,100\n', u'')
(u'Dec 31, 2010', u'99,870,100\n', u'')

上記の inc_data を説明すると、

inc_data = [ [x],
             [y],
             [z] ]   

x、y、z を同じ長さにするにはどうすればよいですか? 長さは、x、y、または z の最大長ですか?

(u'Period Ending', u'Total Revenue\n', u'Cost of Revenue\n')
(u'Dec 31, 2012', u'104,507,100\n', u'56,000,000\n')
(u'Dec 31, 2011', u'106,916,100\n', u'')
(u'Dec 31, 2010', u'99,870,100\n', u'')

問題の説明が長くて冗長で申し訳ありません。もしあれば、私を助けてくれるか、回答済みの同様の質問を教えてもらえますか? どうもありがとう!

4

1 に答える 1

17

izip_longestを使用します。

from itertools import izip_longest

inc_data = [[u'Period Ending', u'Dec 31, 2012', u'Dec 31, 2011', u'Dec 31, 2010'],
            [u'Total Revenue\n', u'104,507,100\n', u'106,916,100\n', u'99,870,100\n'],
            [u'Cost of Revenue\n',u'56,000,000\n']
            ]

print list(izip_longest(*inc_data, fillvalue=u'')) 


# [(u'Period Ending', u'Total Revenue\n', u'Cost of Revenue\n'), 
   (u'Dec 31, 2012', u'104,507,100\n', u'56,000,000\n'), 
   (u'Dec 31, 2011', u'106,916,100\n', u''), 
   (u'Dec 31, 2010', u'99,870,100\n', u'')]
于 2013-10-26T05:22:24.060 に答える