2015-07-08 41 views
5

aşağıda gösterildiği gibi bir iç içe liste var:Python'da iç içe geçmiş listeleri nasıl dizinlenir?

A = [('a', 'b', 'c'), 
    ('d', 'e', 'f'), 
    ('g', 'h', 'i')] 

ve kodu kullanarak her listenin ilk elemanını yazdırmak çalışıyorum:

A = [('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i')] 
print A[:][0] 

Ama şu çıktıyı almak:

('a', 'b', 'c') 

Gerekli çıkışı:

('a', 'd', 'g') 

Python'da bu çıktı nasıl alınır?

cevap

6

A[:] sadece tüm listenin bir kopyasını oluşturur, sonra bu kopyanın 0 öğesini alırsınız.

[tup[0] for tup in A] 

bir listesini almak ya da bir jeneratör ifadeyle tuple() kullanmak için bir tuple almak için:

tuple(tup[0] for tup in A) 

Demo:

>>> A = [('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i')] 
>>> [tup[0] for tup in A] 
['a', 'd', 'g'] 
>>> tuple(tup[0] for tup in A) 
('a', 'd', 'g') 

Burada bir liste anlama kullanmak gerekir

1

Python listeleri çok boyutlu diziler kadar iyi çalışmıyor. Eğer (örneğin siz dizi manipülasyon bir sürü yapacağız ise) ekstra bir bağımlılık eklemek için istekli iseniz , numpy sen

import numpy as np 
A = np.array([('a', 'b', 'c'), 
       ('d', 'e', 'f'), 
       ('g', 'h', 'i')]) 

kullanarak, istediğiniz neredeyse kesin sözdizimi kullanmanızı sağlar

>>> A[:,0] 
array(['a', 'd', 'g']) 

bir başlığın birinci satır elde etmek için:

Bu (bir liste gibi erişilebilir) bir np.array olarak satır verir

>>> tuple(A[:,0]) 
('a', 'd', 'g') 
2

zip(*list_of_lists) ile listelerin/tuplların bir listesini transpoze edebilir ve daha sonra istediğiniz öğeleri seçebilirsiniz.

>>> a 
[('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i')] 
>>> b = zip(*a) 
>>> b 
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')] 
>>> b[0] 
('a', 'd', 'g') 
>>> 
>>> c = zip(*a)[0] 
>>> c 
('a', 'd', 'g') 
>>> 
1

Sen bu şekilde yapmak da yapabilirsiniz:

>>> A = [('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i')] 
>>> map(lambda t:t[0], A) 
['a', 'd', 'g'] 
>>> tuple(map(lambda t:t[0],A)) 
('a', 'd', 'g') 
1

Ayrıca aşağıdaki gibi pandas kullanarak istediğiniz davranışı alabilirsiniz:

In [1]: import pandas as pd 

In [2]: A = [('a', 'b', 'c'), 
    ('d', 'e', 'f'), 
    ('g', 'h', 'i')] 

In [3]: df = pd.DataFrame(A) 

In [4]: df[:][0] 
Out[4]: 
0 a 
1 d 
2 g 
Name: 0, dtype: object 

In [5]: df[:][0].values 
Out[5]: array(['a', 'd', 'g'], dtype=object)