मैं प्रविष्टियों जिस पर मैं कुछ सरल आंकड़े एकत्र करना चाहते का एक iterable है में मिलान तत्वों की गिनती के अधिकांश pythonic तरीका, दो से विभाज्य सभी नंबरों की गिनती और तीन से विभाज्य सभी नंबरों की गिनती का कहना है।कुछ iterable
(आल्ट 1)
r = xrange(1, 10)
twos = 0
threes = 0
for v in r:
if v % 2 == 0:
twos+=1
if v % 3 == 0:
threes+=1
print twos
print threes
यह:
मेरा पहला विकल्प, केवल एक बार सूची के माध्यम से पुनरावृत्ति और सूची में विस्तार से परहेज (और मन में split loop रिफैक्टरिंग रखने) है, बल्कि फूला हुआ लग रहा है बल्कि अच्छा लग रहा है, लेकिन एक सूची में अभिव्यक्ति के विस्तार की सबसे बड़ी खामी है:
(आल्ट 2)
r = xrange(1, 10)
print len([1 for v in r if v % 2 == 0])
print len([1 for v in r if v % 3 == 0])
क्या मैं सच में चाहते हैं इस तरह एक समारोह की तरह कुछ है:
(आल्ट 3)
def count(iterable):
n = 0
for i in iterable:
n += 1
return n
r = xrange(1, 10)
print count(1 for v in r if v % 2 == 0)
print count(1 for v in r if v % 3 == 0)
लेकिन यह कुछ ऐसा है जो एक समारोह के बिना किया जा सकता है की तरह एक बहुत लग रहा है।
(आल्ट 4)
r = xrange(1, 10)
print sum(1 for v in r if v % 2 == 0)
print sum(1 for v in r if v % 3 == 0)
और जब तक छोटी (और मेरी किताब में शायद सबसे खूबसूरत) यह महसूस नहीं करता है यह बहुत अच्छी तरह से आशय व्यक्त करता है जैसे: अंतिम संस्करण यह है।
तो, आप करने के लिए अपने सवाल यह है:
कौन सा विकल्प आप आँकड़े के इन प्रकार के इकट्ठा करने के लिए सबसे ज्यादा पसंद करते हैं? अगर आप कुछ बेहतर है अपने खुद के विकल्प की आपूर्ति के लिए स्वतंत्र महसूस।
- हकीकत में मेरी फिल्टर विधेय सिर्फ इस साधारण परीक्षण की तुलना में अधिक जटिल हैं:
नीचे कुछ भ्रम की स्थिति स्पष्ट करने के लिए।
- वस्तुओं मैं पुनरावृति
- मेरे फिल्टर कार्यों अधिक अलग और एक विधेय
पुन:। दो बार पुनरावृत्त करना, इसमें कुछ चीजें स्पष्टता के लिए जा रही हैं, लेकिन इसके अलावा, गैर-सी-कोड निष्पादित की मात्रा द्वारा एक बार फिर से शुरू होने से कम ओवरहेड नहीं होगा? –
बेशक, अगर मैं केवल पुनरावृति एक बार यह एक शॉट पर काम करता है भी iterables, ओह :) है कि अब तक लगता है कि नहीं था। –
मुझे आपका समाधान पसंद है। लेकिन आप कहते हैं: "कई बार सूची में पुनरावृत्ति करना सुरुचिपूर्ण नहीं है"। यदि एन मान हैं और एम भविष्यवाणी करता है, तो आप एम पर अनुमान लगाते हैं, तो एन मानों पर एम बार को फिर से करने का क्या फायदा है? नोट: मैं एक पाइथन नौसिखिया हूँ। चीयर्स! –