If ifadesiyle anlamayı listeleyin


106

2 yinelenebilirliği karşılaştırmak ve her iki yinelemede görünen öğeleri yazdırmak istiyorum.

>>> a = ('q', 'r')
>>> b = ('q')


# Iterate over a. If y not in b, print y.
# I want to see ['r'] printed.
>>> print([ y if y not in b for y in a])
                              ^

Ama bana ^yerleştirildiği yerde geçersiz bir sözdizimi hatası veriyor . Bu lamba işlevinin nesi yanlış?


5
Aşağıdaki tüm cevaplar doğrudur, ancak aynı zamanda b = ('q')bir demet oluşturmaz. Tek öğeli dizilerin açık bir şekilde belirtilmesi gerekir ,, yanib = ('q',)
dmg

Değiştim tuplesiçine iterables.
OrangeTux

Yanıtlar:


187

Yanlış sipariş vermişsin. ifSonra olmalıdır for(bir olmadığı sürece, if-elseüçlü operatör)

[y for y in a if y not in b]

Ancak bu işe yarar:

[y if y not in b else other_value for y in a]

Teşekkürler. Lambda işlevinde bir if else ifadesiyle ilgili olarak stackoverflow.com/questions/4406389/… yazısını gördüm . Ve sadece if ifadesini kullanmanın (başkası olmadan) aynı sırada çalışacağını düşündüm.
OrangeTux

39

ifSonuna koyarsınız :

[y for y in a if y not in b]

Liste anlayışları, iç içe geçmiş tam belirtilmiş emsalleriyle aynı sırayla yazılır, esasen yukarıdaki ifade şu anlama gelir:

outputlist = []
for y in a:
    if y not in b:
        outputlist.append(y)

Sizin sürümünüz bunun yerine bunu yapmaya çalıştı:

outputlist = []
if y not in b:
    for y in a:
        outputlist.append(y)

ancak bir liste anlama gerekir en azından başlamak bir dış döngü.


Çok yardımcı oldunuz. Teşekkür ederim.
Tolgahan ÜZÜN

7

liste anlama formülü:

[<value_when_condition_true> if <condition> else <value_when_condition_false> for value in list_name]

böylece bunu şu şekilde yapabilirsiniz:

[y for y in a if y not in b]

Yalnızca gösteri amaçlı: [y, eğer y değilse, b'de başka bir yerde y için yanlış]


2
Bir koyamazsınız elseEn az bir tane koyun değil bir liste anlama, içinde. Bir liste anlamayı (filtreleme) koşullu bir ifade ile (bir değeri olması gerekir, else ifadesini zorunlu kılar) karıştırmayın.
Martijn Pieters

Katılıyorum. elsekodda gösterildiği gibi liste anlamada kullanılabilir.
Vishvajit Pathak

2
Bu şartlı bir ifade . Geçerli bir ifadenin geçerli olduğu her yerde kullanılabilir. Anlamaları listelemeye özel değildir.
Martijn Pieters

5

Bu bir lambda işlevi değildir. Bu bir liste anlayışıdır.

Sadece sırayı değiştirin:

[ y for y in a if y not in b]

-2

Yukarıda anlattığım liste anlama önerilerini aşağıda anlatıldığı gibi araştırdım ve denedim ama işe yaramadı. Burada neyi yanlış yapıyorum?

sent_splt=[['good', 'case,', 'excellent', 'value.'], ['great', 'for', 'the', 'jawbone.'],['tied', 'to', 'charger', 'for', 'conversations', 'lasting', 'more', 'than', '45', 'minutes.major', 'problems!!']]

stop_set = ['the', 'a', 'an', 'i', 'he', 'she', 'they', 'to', 'of', 'it', 'from']

x=[a for a in sent_splt if a not in stop_set]
print(x)

Kelimeleri filtrelemiyor.


1
Yapmanız gereken şey bir soru sormak. Cevap göndermeyin.
Whirl Zihin

Aslında benim için son 2 günden itibaren 1 gün aradan sonra soru göndermek diyor. Temel olarak, stackoverflow standardına göre olmayan önceki sorum nedeniyle soru göndermeme izin verilmiyor. Rahatsızlık için özür dilerim.
Deepak Dhiman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.