2013-10-26 21 views
8

Zip() kullanan aşağıdaki python kodları var ve istenmeyen veri kesilmesine neden oluyor gibi görünüyor.python: listenin zip kesilmesini önleme

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 

Sadece baskılar:

(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') 

Ama aşağıdaki yazdırmak istiyorum, ama görünüşe göre ben inc_data kesiliyor dan() zip önlemek için elle u'' dolgu eklemek gerekir. Ama bunu nasıl kodlayacağımı bilmiyorum.

(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 = [ [x], 
      [y], 
      [z] ] 

nasıl x, y ve z aynı uzunlukta olması yapmak yok, yukarıda inc_data tanımlamak? Ve uzunluk x, y veya z'nin maksimum uzunluğudur?

(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'') 

Sorunun uzun ve endişeli açıklaması için özür dilerim. Varsa, bana cevap veren veya cevaplanmış benzer bir soruya işaret edebilir misiniz? çok teşekkürler!

+2

'Kullan [itertools.izip_longest] (http://docs.python.org/2/library/itertools.html#itertools.izip_longest) fillvalue = u''' – falsetru

cevap

16

kullanımı 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'')] 
+0

izip_longest mükemmel çalışıyor. Veriler izip_longest ile çevrildikten sonra, ilk satırı nasıl silebileceğimi biliyor musunuz? (U'Period Ending ', u'Total Revenue \ n', Gelir \ n 'nin üsleri)? Esasen, verileri bir sqlite3 tablosunda saklayacağım. çok teşekkürler! – vt2424253

+0

Bir [dilim:] kullanın (http://stackoverflow.com/questions/509211/pythons-slice-notation) '[[1,2], [3,4], [5,6]] [1:] = [[3, 4], [5, 6]] 'Listenin [1:] dilinin dilimi, ilk tupl listesini kaldıracaktır. Yani yapabilecekleriniz: 'liste (izip_longest (* inc_data, fillvalue = u '')) [1:]' örneğin – dawg

+0

Teşekkürler. Deneme ve hata bana verdiğin sonuçları verdi. Ben dilim denir bilmiyordum, bu yüzden bu tekniği aramak mümkün değildi. Bahşiş için teşekkürler. – vt2424253

İlgili konular