2016-04-06 23 views
2

Ben liste türetimi öğrenmeye çalışıyorum ve ben ihtiva listede a dizeleri ya kelimeleri fox veya rabbitred içeren veya olanlar hariç tutarak yazdırmak istediğiniz bu önemsiz bir örnek oluşturduk blue. Durduğu gibi, benim örneğim işe yarıyor, ancak tek bir kavrayışa yoğunlaştırılabileceğini bilmek istiyorum, bu yüzden set operasyonlarına olan ihtiyacı reddediyorum.Python İçiçe Liste comprehensions

a = ["the red fox", "the blue fox", "the green fox", 
    "the yellow fox", "the red rabbit", "the yellow rabbit"] 
b = ["fox", "rabbit"] 
c = ["red", "blue"] 

d = set([e for e in a for f in b if f in e]) - set([e for e in a for f in c if f in e]) 

for d in d: 
    print d 

cevap

0

Listeniz anlama şu şekilde görünecektir: Eğer neredeyse şartname okur gibi nasıl

d = [x for x in a if any(y in x for y in b) and not any(y in x for y in c)] 

Not.

sonuç

['the green fox', 'the yellow fox', 'the yellow rabbit'] 

sizin örnek kod düz eski in çeki kullanılan beri

, burada altdizgelerin aradığınız varsayarak yaşıyorum ve "mavi" "mavimsi renkte olduğu kabul edilmelidir olduğunu ". Aksi halde, tüm dizelerinizi a içinde boşluk ile bölün ve sonucunuzu hesapladıktan sonra yeniden birleştirin. Gerçekten setleri kullanmak istiyorsanız

0

Alternatif bunu yapabilirsiniz:

[x for x in a if set(x.split() + b) and set(c).isdisjoint(x.split())]