আমার একটি তালিকা আছে:
my_list = [1, 2, 3, 4, 5]
আমি কীভাবে প্রতিটি উপাদানকে my_list5 দিয়ে গুণতে পারি ? আউটপুটটি হওয়া উচিত:
[5, 10, 15, 20, 25]
আমার একটি তালিকা আছে:
my_list = [1, 2, 3, 4, 5]
আমি কীভাবে প্রতিটি উপাদানকে my_list5 দিয়ে গুণতে পারি ? আউটপুটটি হওয়া উচিত:
[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।
একটি সুস্পষ্ট দ্রুত পদ্ধতির তালিকাটি লুপিংয়ের পরিবর্তে ভেক্টরাইজড পদ্ধতিতে গুণ করা। নম্পি এর জন্য ইতিমধ্যে খুব সহজ এবং সহজ উপায় সরবরাহ করেছেন যা আপনি ব্যবহার করতে পারেন।
>>> 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
আপনি যদি একটি তালিকা বোধগম্যতা ব্যবহার করে একটি খাঁটি পাইথন-ভিত্তিক পন্থা চান তবে মূলত সবচেয়ে অজগর উপায় way
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]
এই কোড মধ্যে সব আইটেম পাসের my_listজন্য 5'র __mul__পদ্ধতি এবং আয় কোনো ইটারেটরে মত বস্তু (পাইথন-3.x মধ্যে)। তারপরে আপনি 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কেবলমাত্র রেফারেন্সকে সস্তার তুলনায় সস্তা হিসাবে সামগ্রীর ওভাররাইট করতে ব্যবহার করে overw আপনি যদি স্থান সম্পর্কে আসলেই উদ্বিগ্ন থাকেন তবে কেবল একটি লুপ দিয়ে পুনরাবৃত্তি করুন এবং জায়গায় স্থান পরিবর্তন করুন।
যেহেতু আমি মনে করি আপনি পাইথনের সাথে নতুন, তাই লুপের জন্য ব্যবহার করে আপনার তালিকার মাধ্যমে পুনরাবৃত্তি করুন এবং প্রতিটি উপাদানকে একটি নতুন তালিকায় যুক্ত করুন।
লুপ জন্য ব্যবহার করে
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এই ক্ষেত্রে, ইন SA অনেক, যেমন map((5).__mul__, my_list), যদিও এই বিশেষ ক্ষেত্রে, সহজ জন্য বাইট কোড অনুবাদক মধ্যে কিছু অপ্টিমাইজেশন ধন্যবাদ intগণিত, [x * 5 for x in my_list], দ্রুততর এবং সেইসাথে হচ্ছে আরো Pythonic এবং সহজ ।
সেরা উপায় তালিকা বোধগম্যতা ব্যবহার করা হয়:
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।