मुझे लगता है कि आपके पास NumPy स्थापित है (कम से कम आपका मूल प्रश्न यह सुझाया गया है), इसलिए मैं एक तरीका पेश करूंगा कि आप कैसे (किसी भी सूची-comprehensions और स्पष्ट पुनरावृत्तियों के बिना) एक बहुत ही कुशल तरीके से numpy-arrays
का उपयोग कर अपने परिणाम प्राप्त:
> import numpy as np
> s = 10
> l = np.arange(1, 100) * 2 + s * 2 # Arrange produces an array. Syntax is like "range".
> print(l)
array([ 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46,
48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72,
74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98,
100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124,
126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150,
152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176,
178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202,
204, 206, 208, 210, 212, 214, 216, 218])
मैं तथ्य यह है कि NumPy सरणी पर गणितीय क्रियाओं सभी तत्वों को प्रभावित करते थे। इसलिए यह इतना आसान आपरेशन लिखना है: np.arange(1, 100) * 2
, क्योंकि यह 2
और numpy.arange
साथ हर तत्व गुणा किया जाता है के बीच सभी नंबरों युक्त एक सरणी बनाने के लिए एक संभावना एक start
और stop
के साथ दिया एक वैकल्पिक step
(बस python range
की तरह)।
न्यूमपी के साथ यह append
एकल मानों के लिए एक अच्छा विकल्प नहीं होगा (क्योंकि यह पूरी सरणी को पुन: प्रयास करता है और न केवल मूल्यों को जोड़ता है)। ज्यादातर मामलों में अंतिम आकार और आकार के साथ एक सरणी बनाना और सीधे उस पर काम करना सर्वोत्तम होता है। बेशक आप concatenate
या append
अलग-अलग NumPy arrays कर सकते हैं, लेकिन जैसा कि बताया गया है कि यह हमेशा एक पूरी तरह से नई सरणी बनाता है और इसलिए बहुत कुशल नहीं है (यदि नियमित रूप से उपयोग किया जाता है)।
अपने प्रारंभिक प्रयास पर तो अब कुछ टिप्पणियों और क्यों यह काम नहीं किया: अपने समारोह संख्या के बहुत बनाया है, लेकिन यह प्रत्येक पाश में उन्हें ओवरराइड करता है और केवल पिछले एक रिटर्न:
def func(s):
for i in range(1, 100):
t = i
p = t * 2 + s * 2
# Next iteration of the loop just overwrites p
# Returns only the last p
return p
आप (return
के बजाय yield
के साथ) यह एक जनरेटर बना सकता है, लेकिन यह शायद overkill यहाँ है, मैं :-)
l = []
def func(s):
for i in range(1, 100):
p = i * 2 + s * 2
yield p
l.append(list(func(10))) # Need to convert the generator to a list here.
# In this case a simple "l = list(func(10))" would be easier if you don't need to append.
@ अल्बर्टो बोन्सेंटो: इंडेंटेशन फिक्सिंग के साथ समस्या अब स्पष्ट होनी चाहिए। क्या वह 'वापसी' वास्तव में समारोह में 'लूप' का हिस्सा था? और आपने फ़ंक्शन बॉडी को क्यों इंडेंट नहीं किया? –
@MartijnPieters मुझे खेद है कि मैं सही पल में संपादन कर रहा था! मैंने तुम्हारा ओवरराइट करने का नाटक नहीं किया! –
इस पर विचार करें? 'func = lambda s: [(टी * 2) + एस * 2 टी में श्रेणी के लिए (1, 100)]' – Signal