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.