2016-03-30 23 views
2

Hedef: dinamik (1) testler bir liste anlamada bir koşullu deyimi oluşturma - yani her yineleme üzerine - eleman listesinde değilse kavramış olmak verilen (2) liste her tekrarda güncellenir.Dinamik kendinden referanslı liste anlama koşullu

Arka plan kodu:

arr = [2, 2, 4] 
l = list() 

İstenen çıkış:

l = [2, 4] 

ile İstenilen davranış döngü için:

for element in arr: 
     if element not in l: 
      l.append(element) 

Yanlış liste anlama değil üreten istenilen davranışı:

l = [element for element in arr if element not in l] 

Soru düzeltilmiş: istenilen davranışı, yani istenen çıkış yukarıda belirtilen oluşturur böylece nasıl liste anlama düzeltebilirim?

+1

Sen –

+0

içine anlama yapıyoruz aynı listeyi değiştiremezsiniz Bunun için bir liste anlama kullanmama gerek var mı? Bir set tamam mı? –

+0

Çoğaltmayı kaldırmak istiyorsanız, http://stackoverflow.com/questions/480214/how-do-you-remove-duplicates-from-a-list-in-python-whilst- adresine bakabilirsiniz. – SwiftsNamesake

cevap

0

Kesinlikle bir liste kavrayışını kullanmanız gerekiyorsa, for döngüsünüzü bir defada yeniden çizebilirsiniz.

Eğer comprehensions bağlı, ancak mutlaka comprehensions listelemek için ise
>>> arr = [2, 2, 4] 
>>> l = list() 
>>> _ = [l.append(element) for element in arr if element not in l] 
>>> print(l) 
[2, 4] 
>>> print(_) 
[None, None] 

, sen jeneratör anlama önerdi kullanabilirsiniz: Olumsuz o list.append döner nedir beri, None unsurların bir liste ile sona erecek olmasıdır @tdelaney tarafından. Bu istenmeyen bir yan ürün oluşturmaz ve tam olarak ne istediğinizi yapar. Ya daha

>>> arr = [2, 2, 4] 
>>> l = list() 
>>> l.extend(element for element in arr if element not in l) 

daha iyi bir yolu muhtemelen bir listeye daha sonra bir dizi orijinal listesini hazırladık ve olacaktır. Bir listeyi genişletmek için bir set kullanmanın avantajı, kümelerin daha önce muhafaza edilmesini kontrol ettikten sonra eleman eklemede daha hızlı olmasıdır. Bir liste, bir eleman eklediğinizde doğrusal bir arama yapmak ve yeniden tahsis etmek zorundadır.

>>> l = list(set(arr))