2013-10-08 30 views
7

Daha sonra girebileceğim boş liste sayısının iç içe geçmiş bir listesi olan bir değişkene sahip olmak istiyorum. benzeyen birşey:Python'da bir dizi boş iç içe geçmiş liste oluşturma

my_variable=[[], [], [], []] 

Ancak, ben sadece oluşturma adımında, gerekir önceden kaç tane liste bilmiyorum, öyleyse bunu belirleme a değişken gerekir. Basit my_variable=[[]]*a'u düşündüm, ancak bu listelerin kopyalarını oluşturur ve sahip olmak istediğim şey değil.

my_variable=[] 
for x in range(a): 
    my_variable.append([]) 

ama daha şık bir çözümü (tercihen tek satırlık) arıyorum:

yapabilirdim. Var mı

lst = [[] for _ in xrange(a)] 

aşağıya bakın::

+3

Bunu yeniden düşünmeniz gerektiğini düşünüyorum, Bu ihtiyaçlarınız için bir sözlük kullanmak daha iyi olabilir. [Bu gönderi] 'ye danışın (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

+4

'my_variable = [[] _ _ xrange (a) için] – inspectorG4dget

+4

olası kopyası [Python Liste Dizini] (http://stackoverflow.com/questions/13058458/python-list-index), [Belirtilen boyutta listelerin bir listesini yapmada sorun yaşıyorum] (http://stackoverflow.com/q/17411892) ve [neden Python'da iç içe geçmiş bir listede yalnızca tek bir öğeyi değiştiremiyorum] (http://stackoverflow.com/q/10941032) –

cevap

12

bir list comprehension deneyin yukarıdaki Python 2.x içindir

>>> a = 3 
>>> lst = [[] for _ in xrange(a)] 
>>> lst 
[[], [], []] 
>>> a = 10 
>>> lst = [[] for _ in xrange(a)] 
>>> lst 
[[], [], [], [], [], [], [], [], [], []] 
>>> # This is to prove that each of the lists in lst is unique 
>>> lst[0].append(1) 
>>> lst 
[[1], [], [], [], [], [], [], [], [], []] 
>>> 

Not Ancak bu xrange kaldırıldı beri Python 3.x üzerinde, bunu isteyecektir:

lst = [[] for _ in range(a)] 
+0

I direk karartma vardı, daha önce liste anlama hakkında düşünmedim. :) Bununla birlikte, Python 2.x'in neden 'xrange'' 'range''den daha iyi olduğunu merak ediyorum? İkisi de aynı şekilde çalışıyor, değil mi? –

+1

@ AndyS.c. - Aslında değil. Python 2.x'de, xrange (bir xrange yineleyici döndürür), 'range'den daha hızlıdır (bir liste döndürür). Python 3.x'te. Ancak, 'range'' xrange''nın yaptığı şeyi yapmak için yapıldı ve böylece xrange' kaldırıldı. İşte bir referans: http: // stackoverflow.com/questions/135041/should-you-always-favor-xrange-over-range – iCodez

6
>>>[[] for x in range(10)] #To make a list of n different lists, do this: 
[[], [], [], [], [], [], [], [], [], []] 

Düzenleme: -

[[]]*10 

Bu gibi yukarıda size aynı sonucu verecektir ancak liste vardır farklı örnekler değil, aynı örnek için sadece n referanslardır.

+4

Bu nasıl [[]] * 10' – inspectorG4dget

+0

ya da farklı olduğunu göstermek için yararlı olacaktır. – Nullify

+2

Cevabınızı genişleterek, bunun istenen sonuca nasıl ulaştığını, muhtemelen belgelere bağlantı oluşturduğunu açıklayın. Olduğu gibi, bu sadece marjinal yararlıdır. –

İlgili konular