2010-11-23 8 views
467

Python'da aşağıdakileri nasıl yapabilirim? EsasenPython'un listesi kavramasında/dışındaysa?

row = [unicode(x.strip()) for x in row if x is not None else ''] 

:

  1. boş dizeleri ile tüm Nones değiştirin ve sonra
  2. bir işlevi yürütmek.
+3

olası yinelenen (http://stackoverflow.com/questions/2951701/is-it- olası-kullanım-else-in-a-python-liste-anlama) –

cevap

734

Tamamen bu sadece bir sipariş mesele, bunu yapabilir: Bu aslında farklı bir dil yapısı kullandığı

[ unicode(x.strip()) if x is not None else '' for x in row ] 

Not Bir conditional expression, kendisi comprehension syntax parçası değildir if iken for…in'dan sonra liste anlamanın bir parçasıdır ve kaynağın yinelenen filtresindeki öğelerine kullanılır.

Koşullu ifadeler, bazı koşullara göre iki ifade değeri arasında seçim yapmak istediğiniz her durumda kullanılabilir. Bu, ternary operator ?: that exists in other languages ile aynıdır.

value = 123 
print(value, 'is', 'even' if value % 2 == 0 else 'odd') 
+86

if/else işte burada "üçlü operatör" sözdizimi olduğunu ve anlama sözdizimini listelemediğini unutmayın. –

+1

OP'nin önceki sorusu üzerine, Adam'ın açıklaması çok önemli! – delnan

+7

Bu yüzden, üçlü operatörü parantez içine koymayı tercih ediyorum, bu sadece bir anlama değil, normal bir anlatımın daha açık olduğunu ortaya koyuyor. –

30

Tek yönlü:

def change(f): 
    if f is None: 
     return unicode(f.strip()) 
    else: 
     return '' 

row = [change(x) for x in row] 

sonra olsa da vardır: Örneğin

row = map(change, row) 

Veya bir lambda satır içi kullanabilirsiniz.

>>> print(", ".join(["ha" if i else "Ha" for i in range(3)]) + "!") 
Ha, ha, ha! 

Bu if i0 ve fonksiyon range() tarafından üretilen tüm diğer değerleri için True için False değerlendirir ve boşlukta:

+8

Bu, aynı zamanda, "if" ifadesinden veya "else" deyim bloğundaki koddan olası istisnaları işlediğinizde kullanmak için iyi bir (belki de sadece) tekniğidir. Kabul edilen cevap basit vakalar için daha iyidir. – martineau

+1

Bu, okunan bir anlamada kullanmaktan çok daha kolaydır. –

25

Burada bir başka örnektir. Bu nedenle aşağıdaki gibi liste anlama değerlendirir:

>>> ["ha" if i else "Ha" for i in range(3)] 
['Ha', 'ha', 'ha'] 
[? mümkün bir piton liste anlama 'başka' kullanmayı mı] arasında