2016-03-28 9 views
1

Şu anda 52: 3 boyutuna sahip bir 2B listeyi filtrelemeye çalışıyorum. Listeyi satırlara göre filtrelemek istiyorum. giriş listesi içinBelirli bir içeriğe sahip olan altbilgiler için liste listesini filtreleme

Örnek sıraları: Liste filtrelemeden

list = [[u'Kr', u'Se', ''],[u'Fe', '', ''],[u'Ca', '', '']] 

çıkış üst üste bulunan iki boşluk ('') olduğunda olması gerekmektedir. Satırı tutması ve satırı yeni bir değişkene yerleştirmesi gerekiyor. Bu nedenle örnek çıktısı olacaktır:

new = [[u'Fe', '', ''],[u'Ca', '', '']] 
+0

Hey, işe aldın: bol x[:] yerine) x arasında kullanımı nedir? Cevabım yardım etti mi? – timgeb

cevap

0

bazı noktalar: Listede inşa gölge çünkü

, değişken adı list kullanmayın.

Burada listelerin bir listesi var, ve bu listelerden bazılarıboş alanı değil, boş bir dize içeriyor. ' '.

söyleniyor

, herhangi alt liste x içerir kaç boş dizeler saymak ve bu iki sayısıdır eşitse, bir liste anlama yardımıyla yeni bir liste haline koyabilirsiniz:

>>> lst = [[u'Kr', u'Se', ''],[u'Fe', '', ''],[u'Ca', '', '']] 
>>> result = [x for x in lst if x.count('') == 2] 
>>> result 
[[u'Fe', '', ''], [u'Ca', '', '']] 

Bu davranış arzu edilmez

>>> result[0][0] = 'Xe' 
>>> result 
[['Xe', '', ''], [u'Ca', '', '']] 
>>> lst 
[[u'Kr', u'Se', ''], ['Xe', '', ''], [u'Ca', '', '']] 

, liste anlama da listelerin kopyalarını (oluşturun: burada bir şey kopyalamak edemediğinden, sublists değişiklikler onlar için/tüm referanslar arasında isimleri görülecektir unutmayın önceki eski sadece bir fark

>>> lst = [[u'Kr', u'Se', ''],[u'Fe', '', ''],[u'Ca', '', '']] 
>>> result = [x[:] for x in lst if x.count('') == 2] 
>>> result 
[[u'Fe', '', ''], [u'Ca', '', '']] 
>>> result[0][0] = 'Xe' 
>>> result 
[['Xe', '', ''], [u'Ca', '', '']] 
>>> lst 
[[u'Kr', u'Se', ''], [u'Fe', '', ''], [u'Ca', '', '']] 
İlgili konular