2012-01-28 14 views
7

Benim sql sorgusu: şimdi 3 farklı listeSadece bazı argümanları zip'den nasıl kurtarırsınız, hepsi değil?

id,value,zvalue=zip(*ans) 

bana 3 verecek şekilde ben bütün bu 3 değişken isterseniz

ans=(1,23,34)(12,34,35)(31,67,45)(231,3412,234) 

:

select id,value,zvalue from axis 

beni böyle neden verir ayrı listeler. ama ben sadece id ve değer olarak ayrı bir liste istiyorum. UNPACK HATASI İÇİN ÇOK ÇOK DEĞER VERECEKTİR.

id,value =zip(*ans) 

orada sorguda 10 parametrelerdir i ZIP kullanırken tüm parametreleri kullanmak zorunda olmadığını ben sql query.because gelen listeleri herhangi bir sayı oluşturmak herhangi bir yolu yoktur ??? seni böyle bir şey arıyor olabileceğini düşünüyorum

+2

Bunun için bir "tutucu değişkenini" kullanmak zorunda. 'id, value, _ = ...' – Gandaro

cevap

12

Bağımsız değişkenlerin sayısı eşleşmelidir, bu Python 2'de bir kuraldır. Python 3 için, bir listeyi yakalamak için * kullanabilirsiniz.

ortak pythonic (2.x) geçici çözüm kullanmaz değişkenleri, yani belirtmek için _ kullanmaktır:

id,value,_ = zip(*ans) # only works for exactly three values 

DSM yorumladığı gibi, Python 3, siz "* kapmak için kullanabilirsiniz bir liste olarak "args kalan:

id, value, *_ = zip(*ans) # _ will be a list of zero or more args 

Ya da, en basit, sadece zip gelen getiriyi dilim: Eğer kullanıyorsanız

id,value = zip(*ans)[:2] # ignore all but first two values 
+3

Bağımsız değişkenlerin eşleşmesi gereken kural, Python 3'te biraz rahatladı, burada "ilk, * orta, son = [1,2,3,4]" gibi bir şey var. 1 verir, [2,3], 4. – DSM

+0

Ben python 2.7 kullanıyorum ve çözüm için teşekkürler. Dilim tekniğini sevdim. –

+0

@DSM: python3 çözümünüzü eklediniz, yorum için teşekkürler! – Macke

1

yardım lütfen:

ids = [t[0] for t in ans] 
values = [t[1] for t in ans] 

ilk liste anlama, yani ans içinde id sütunu tüm dizilerini ilk sütunu alır. İkinci liste kavraması, ans, yani value sütununda tüm tupller için ikinci sütunu alır.

2

Python 3 n ilave unsurları açmak için kullanabilirsiniz:

In [0]: a, b, *_ = (1, 2, 3, 4) 

In [1]: a 
1 
İlgili konular