मेरे पास एक सूची है:
my_list = [1, 2, 3, 4, 5]
मैं प्रत्येक तत्व को my_list
5 से कैसे गुणा कर सकता हूं ? आउटपुट होना चाहिए:
[5, 10, 15, 20, 25]
मेरे पास एक सूची है:
my_list = [1, 2, 3, 4, 5]
मैं प्रत्येक तत्व को my_list
5 से कैसे गुणा कर सकता हूं ? आउटपुट होना चाहिए:
[5, 10, 15, 20, 25]
map
(और हमेशा बेहतर map
होगा अगर आवश्यकता होगी lambda
)।
जवाबों:
आप बस एक सूची समझ का उपयोग कर सकते हैं:
my_list = [1, 2, 3, 4, 5]
my_new_list = [i * 5 for i in my_list]
>>> print(my_new_list)
[5, 10, 15, 20, 25]
ध्यान दें कि एक सूची बोध आमतौर पर एक for
लूप करने का एक अधिक कुशल तरीका है :
my_new_list = []
for i in my_list:
my_new_list.append(i * 5)
>>> print(my_new_list)
[5, 10, 15, 20, 25]
एक विकल्प के रूप में, यहां लोकप्रिय पंडों के पैकेज का उपयोग करके एक समाधान दिया गया है:
import pandas as pd
s = pd.Series(my_list)
>>> s * 5
0 5
1 10
2 15
3 20
4 25
dtype: int64
या, यदि आप केवल सूची चाहते हैं:
>>> (s * 5).tolist()
[5, 10, 15, 20, 25]
l1
और l2
चर नाम के रूप में।
l1
जैसे l_1
, list_1
आदि ये हैं सभी की तुलना में बेहतर Num_1
।
एक धमाकेदार तेजी से दृष्टिकोण सूची से अधिक लूपिंग के बजाय गुणा तरीके से करना है। Numpy ने पहले से ही इसके लिए एक बहुत ही सरल और आसान तरीका प्रदान किया है जिसका आप उपयोग कर सकते हैं।
>>> import numpy as np
>>>
>>> my_list = np.array([1, 2, 3, 4, 5])
>>>
>>> my_list * 5
array([ 5, 10, 15, 20, 25])
ध्यान दें कि यह पायथन की मूल सूचियों के साथ काम नहीं करता है। यदि आप किसी संख्या को किसी सूची से गुणा करते हैं तो यह उस संख्या के आकार के आइटम को दोहराएगा।
In [15]: my_list *= 1000
In [16]: len(my_list)
Out[16]: 5000
यदि आप सूची बोध का उपयोग करके शुद्ध पायथन-आधारित दृष्टिकोण चाहते हैं, तो मूल रूप से जाने के लिए सबसे अधिक पायथोनिक तरीका है।
In [6]: my_list = [1, 2, 3, 4, 5]
In [7]: [5 * i for i in my_list]
Out[7]: [5, 10, 15, 20, 25]
सूची बोध के अलावा, एक शुद्ध कार्यात्मक दृष्टिकोण के रूप में, आप map()
निम्न के रूप में अंतर्निहित फ़ंक्शन का उपयोग कर सकते हैं :
In [10]: list(map((5).__mul__, my_list))
Out[10]: [5, 10, 15, 20, 25]
यह कोड 's' विधि के भीतर सभी वस्तुओं को पास करता my_list
है और पुनरावृत्ति जैसी वस्तु देता है (अजगर -x में)। फिर आप फ़ंक्शन में निर्मित (पाइथन-2. x में आपको उपयोग करके सूची को सूचीबद्ध करने के लिए पुनरावृत्ति परिवर्तित कर सकते हैं क्योंकि आपको डिफ़ॉल्ट रूप से सूची वापस करने की आवश्यकता नहीं है )।5
__mul__
list()
map
In [18]: %timeit [5 * i for i in my_list]
463 ns ± 10.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [19]: %timeit list(map((5).__mul__, my_list))
784 ns ± 10.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [20]: %timeit [5 * i for i in my_list * 100000]
20.8 ms ± 115 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [21]: %timeit list(map((5).__mul__, my_list * 100000))
30.6 ms ± 169 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [24]: arr = np.array(my_list * 100000)
In [25]: %timeit arr * 5
899 µs ± 4.98 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
आप इसे इस तरह से कर सकते हैं:
l = [1, 2, 3, 4, 5]
l[:] = [x * 5 for x in l]
इसके लिए अतिरिक्त आयात की आवश्यकता नहीं है और यह बहुत ही पाइथोनिक है।
l = [x * 5 for x in l]
खत्म हो गया था l[:] = [x * 5 for x in l]
। उत्तरार्द्ध एक नई सूची बनाता है, फिर इसका उपयोग l
संदर्भ की सामग्री को अधिलेखित करने के लिए करता है, जो कि संदर्भ को फिर से परिभाषित करने के लिए सस्ता है। यदि आप वास्तव में अंतरिक्ष के बारे में चिंतित हैं, तो बस एक लूप के साथ पुनरावृत्त करें और इन-प्लेस को म्यूट करें।
चूँकि मुझे लगता है कि आप पायथन के साथ नए हैं, तो लंबा रास्ता तय करते हैं, अपनी सूची को लूप के लिए उपयोग करते हैं और प्रत्येक तत्व को एक नई सूची में जोड़ते हैं।
लूप के लिए उपयोग कर रहा है
lst = [5, 20 ,15]
product = []
for i in lst:
product.append(i*5)
print product
सूची की समझ का उपयोग करना, यह भी लूप के लिए उपयोग करने के समान है लेकिन अधिक 'पायथोनिक' है
lst = [5, 20 ,15]
prod = [i * 5 for i in lst]
print prod
मानचित्र के साथ (अच्छा नहीं है, लेकिन समस्या के लिए एक और दृष्टिकोण):
list(map(lambda x: x*5,[5, 10, 15, 20, 25]))
इसके अलावा, यदि आप सुन्न या खस्ता सरणियों का उपयोग करते हैं, तो आप इसका उपयोग कर सकते हैं:
import numpy as np
list(np.array(x) * 5)
from functools import partial as p
from operator import mul
map(p(mul,5),my_list)
एक तरीका है कि आप इसे कर सकते हैं ... आपका शिक्षक शायद बहुत कम जटिल तरीका जानता है जो शायद कक्षा में शामिल था
map
साथ lambda
; जिस पल की आपको आवश्यकता है lambda
, आप सूची बोध या जनरेटर अभिव्यक्ति के साथ बेहतर होंगे। यदि आप चतुर हैं, तो आप बहुत कुछ किए बिना काम कर सकते हैं , जैसे कि इस मामले में , हालांकि इस विशेष मामले में, सरल गणित के लिए बाइट कोड दुभाषिया में कुछ अनुकूलन के लिए धन्यवाद , तेज है, साथ ही अधिक पायथोनिक और सरल भी है। । map
lambda
map((5).__mul__, my_list)
int
[x * 5 for x in my_list]
मुझे सूची बोध या मानचित्र का उपयोग केवल एक वस्तु के नाम x के साथ करना दिलचस्प लगा। ध्यान दें कि जब भी x को पुन: असाइन किया जाता है , तो इसकी आईडी (x) बदल जाती है, अर्थात एक अलग वस्तु की ओर इशारा करती है।
x = [1, 2, 3]
id(x)
2707834975552
x = [1.5 * x for x in x]
id(x)
2707834976576
x
[1.5, 3.0, 4.5]
list(map(lambda x : 2 * x / 3, x))
[1.0, 2.0, 3.0]
id(x) # not reassigned
2707834976576
x = list(map(lambda x : 2 * x / 3, x))
x
[1.0, 2.0, 3.0]
id(x)
2707834980928
सूची समझ का उपयोग करने का सबसे अच्छा तरीका है:
def map_to_list(my_list, n):
# multiply every value in my_list by n
# Use list comprehension!
my_new_list = [i * n for i in my_list]
return my_new_list
# To test:
print(map_to_list([1,2,3], -1))
रिटर्न: [-1, -2, -3]
map
से बेहतर हैfor-loop
।