Liste

2015-11-23 16 views
6

Ben mesela burada üç liste olup keyfi listeleri vardır:Liste

a = [1,1,1,1] 
b = [2,2,2,2] 
c = [3,3,3,3] 

Ve böyle çıktı almak için onları bir arada devrik istiyorum:

f_out = [1,2,3] 
g_out = [1,2,3] 
... 
n_out = [1,2,3] 

Gördüğünüz gibi, "sütunları" "satırlara" dönüştürdüm.

Sorun, bir liste uzunluğundan bağımsız olmalıdır.

a = [1,1] 
b = [2] 
c = [3,3,3] 
# output 
f_out = [1,2,3] 
g_out = [1,3] 
n_out = [3] 
+6

'itertools.zip dosyasına bakmak isteyebilirsiniz. _longest' - Bu ne istersen, sadece ekstra dolguyu filtrelemek zorundasın. – mgilson

+0

@mgilson Teşekkürler! Bana yardımcı olabileceğini düşünüyorum :) – Paddy

+0

Bu soruya bakan ve girdi ile çıktı arasındaki ilişkinin ne olduğunu merak eden herkes için, neredeyse bir transpoze matriks gibi davranıyor. IOW, 'f',' g' ve 'h',' a', 'b' ve' c’yi yatay olarak kaplamaktan ve yukarıdan aşağıya doğru okumaktan kaynaklanır. –

cevap

11

Sen None listelerinde potansiyel geçerli bir değer ise, zip_longest

>>> from itertools import zip_longest 
>>> a = [1,1] 
>>> b = [2] 
>>> c = [3,3,3] 
>>> f,g,h=[[e for e in li if e is not None] for li in zip_longest(a,b,c)] 
>>> f 
[1, 2, 3] 
>>> g 
[1, 3] 
>>> h 
[3] 

kullanmak varsayılan None yerine bir nöbetçi object kullanabilirsiniz::

>>> b = [None] 
>>> sentinel = object() 
>>> [[e for e in li if e is not sentinel] for li in zip_longest(a,b,c, fillvalue=sentinel)] 
[[1, None, 3], [1, 3], [3]] 
Örneğin

+2

python3 için zip_longest –

+1

@PadraicCunningham: İyi yakalama - sabit – dawg