Python'un aşağıdaki gibi bir şeyi var mı?Python için şart koşulan
for item in items #where item>3:
#.....
Python 2.7 ve Python 3.3'ü birlikte kullanıyorum.
Python'un aşağıdaki gibi bir şeyi var mı?Python için şart koşulan
for item in items #where item>3:
#.....
Python 2.7 ve Python 3.3'ü birlikte kullanıyorum.
:
for x in (y for y in items if y > 10):
....
itertools.ifilter başka bir seçenektir - ve hatta verimlilik önemli olduğunda, örneğin tercih edilir. büyük bir veri kümesinde.
Böyle bir şey demek: - Yeni bir liste oluşturmak olmaz Generator
ifadesini kullanabilirsiniz,
item_list = [item for item in items if item > 3]
Ya da, daha sonra yield
kullanarak her tekrarında sonraki elemanını döndüren bir jeneratör, döner yöntemi: - bir generator expression ile döngü birleştirebilirsiniz
for item in (item for item in items if item > 3):
# Do your task
@Downvoter'da belirtilen True
öğelerini ayıklayın. Neden bir düşüş yok? Downvoter yorumu yapabilir mi? –
Bu yanlış .. –
@ J.F.Sebastian Ah özür dilerim, sonra "if" olmalıdır. –
Orada sorunuzu where
gibi özel bir sözdizimi değil, ama başka bir dilde yazar gibi her zaman sadece senin for
döngü içinde if
ifadeyi kullanabilirsiniz:
for item in items:
if item > 3:
# Your logic here
ya da bir bekçi (başka bir dil gibi yine) fıkra: Bu sıkıcı yaklaşımların
for item in items:
if not (item > 3): continue
# Your logic here
Hem bunun için özel bir sözdizimi olacaktır neredeyse özlü ve okunabilir.
Bir jeneratör ifadesi ile en çok kullanılan çözüm daha işlevseldir ve listenin ifade için tam olarak ne içerdiğini gösterir. – Neil
@Neil Bunun bir indirgeme garantisi olduğunu düşünmüyorum. "Daha işlevsel" iyi bir şey olup olmadığı bir tat sorusu. Bu yaklaşım, bazı durumlarda ayrıntılı görünen bir kod satırı kullanır; tek-çizgi jeneratörü, başlangıç sekansı için ekspresyonu ve bir sentezleme ekspresyonunu bir sıraya (ve ek olarak bir 'x in' ekine) sokar ve bu da sekans ekspresyonu ve sentezleme ifadesi buysa bir satıra çok fazla tıklamaya çalışabilir. uzun. Jeneratör yaklaşımı, yeni dillerin aşina olabileceği bir dil özelliği de kullanır. En iyisi, bağlama ve izleyiciye bağlıdır. –
Sen açık if
ifadeyi kullanabilirsiniz: Daha sonra yineleme bir isim gerekirse bir jeneratör oluşturabilir
for item in items:
if item > 3:
# ...
Veya, example:
filtered_items = (n for n in items if n > 3)
Yoksa bunu geçebileceği işlev:
total = sum(n for n in items if n > 3)
Tadı sorun olabilir ama ben f Yukarıdaki seçeneklere göre çirkin olması için for x in (y for y in items if y > 3):
gibi inline genexpr ile birleştirilen bir for-döngüsü belirtin.
Python 3 ve Python 2.7 her ikisi de bir işlev için (aşağıdaki örnekte, bu lambda fonksiyonudur) bir listeden ürün ekstre sağlar filter()
fonksiyonu True
döner sahiptir: filter()
içinde
>>> nums=[1,2,3,4,5,6,7,8]
>>> for item in filter(lambda x: x>5,nums):
... print(item)
...
6
7
8
fonksiyonu atlama olacak Yalnızca pydoc filter
Bu, hiçbir ara dizi üretilmediğinden bunu yapmak için doğru yoldur. Buna jeneratör ifadesi denir. IMO, sadece x için x için daha kısa yazamazsınız x> 10: 'olsa. –
@MichaelAnderson: Evet, bu temiz olurdu.Bu sözdiziminin Guido tarafından reddedildiği söylense de, bir kanıt bulamadım. – georg