2012-10-30 12 views
5

iki liste içine yuvalanmış liste:Bölme Böyle bir yuvalanmış liste var

my_list = [[1320120000000, 48596281], [1320206400000, 48596281], [1320292800000, 50447908]] 

Şöyle bir şey haline bölmek istiyorum:

my_list1 = [48596281, 48596281, 50447908] 
    my_list2 = [1320120000000, 1320206400000, 1320292800000]  

bunun ne olduğunu biliyorum Oldukça basit, ama işe yaramadı. Herhangi bir yardım çok takdir edilecektir.

+0

[piton dokümanlardan] (http: // docs. python.org/2/library/functions. html # zip). 'zip() işlevi ile birlikte * işleci bir listenin açılmasını sağlar ' – kreativitea

cevap

9

zip yerleşik işlev budur.

my_list2, my_list1 = zip(*my_list) 

yerine dizilerini listeleri istiyorsanız,

my_list2, my_list1 = map(list, zip(*my_list)) 
+0

Cevabınız için teşekkürler, ve kaç yuvalanmış liste' * my_list' içinde olduğunu bilmediğimde nasıl yapabilirim? – Marine1

+0

Muhtemelen 'my_lists = zip (* my_list)' daha sonra len (my_lists) tarafından, sonunda kaç tane liste aldığınızı öğreneceksiniz. – Drachenfels

+0

'zip' ile rahatsız edici bulduğum şey, iç içe geçmiş listeniz bile dağınık verilerle sonuçlanabilecek mükemmel simetriktir, bu nedenle liste anlaması muhtemelen biraz daha iyidir, lütfen düşünün: ' ab = [['a', ' A ', 0], [' b ', 1], [' c ',' C ', 2]]; Baskı (liste (zip (* ab))); [('a', 'b', 'c'), ('A', 1, 'C')] ' – Drachenfels

3

Sen liste anlama kullanabilirsiniz yapabilirsiniz. list comprehension kullanarak

my_list1 = [i[1] for i in my_list] 
my_list2 = [i[0] for i in my_list] 
2

:

In [6]: lis1,lis2=[x[0] for x in my_list],[x[1] for x in my_list] 
In [7]: lis1 
Out[7]: [1320120000000L, 1320206400000L, 1320292800000L] 

In [8]: lis2 
Out[8]: [48596281, 48596281, 50447908] 

veya operator.itemgetter() kullanarak:

In [19]: lis1,lis2=map(itemgetter(0),my_list) , map(itemgetter(1),my_list) 

In [20]: lis1 
Out[20]: [1320120000000L, 1320206400000L, 1320292800000L] 

In [21]: lis2 
Out[21]: [48596281, 48596281, 50447908] 

timeit karşılaştırmalar:

In [42]: %timeit lis1,lis2=[x[0] for x in my_list],[x[1] for x in my_list] #winner if lists are required 
100000 loops, best of 3: 1.72 us per loop 

In [43]: %timeit my_list2, my_list1 = zip(*my_list) # winner if you want tuples 
1000000 loops, best of 3: 1.62 us per loop 

In [44]: %timeit my_list2, my_list1 = map(list, zip(*my_list)) 
100000 loops, best of 3: 4.58 us per loop 

In [45]: %timeit lis1,lis2=map(itemgetter(0),my_list),map(itemgetter(1),my_list) 
100000 loops, best of 3: 4.4 us per loop