কম্পিউটার

জিপ ব্যবহার করে সমান্তরালভাবে পুনরাবৃত্তিকারীদের কীভাবে প্রক্রিয়া করবেন


পরিচয়

তালিকা বোধগম্যতা একটি উৎস তালিকা গ্রহণ করা সহজ করে এবং একটি অভিব্যক্তি প্রয়োগ করে একটি প্রাপ্ত তালিকা পেতে। উদাহরণস্বরূপ, বলুন যে আমি একটি তালিকার প্রতিটি উপাদানকে 5 দিয়ে গুণ করতে চাই৷ এখানে, আমি একটি সাধারণ ফর লুপ ব্যবহার করে এটি করি৷

a =[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]multiply_by_5 =[]x এর জন্য a:multiply_by_5.append(x*5)print(f"আউটপুট \n *** {multiply_by_5}")

আউটপুট

<প্রে>*** [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]

একটি তালিকা বোঝার সাথে, আমি এক্সপ্রেশন এবং লুপ ওভার করার জন্য ইনপুট ক্রম উল্লেখ করে একই ফলাফল অর্জন করতে পারি।

# তালিকা বোঝারmultiply_by_5 =[x*2 এর জন্য x a]মুদ্রণ(f"আউটপুট \n *** {multiply_by_5}")

আউটপুট

*** [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] 

এখন, আমরা বলি আপনার কাছে যোগ করার জন্য কয়েকটি তালিকা আছে।

<পূর্ব># 1। Numberslist1 =[100, 200, 300, 400]list2 =[500, 600, 700, 800]# 2. একটি নতুন তালিকা তৈরি করতে দুটি তালিকা যোগ করুন3 =[]# পরিসরে একটি লুপ ব্যবহার করে। (len(list1)):added_value =list1[i] + list2[i]list3.append(added_value)print(f"আউটপুট \n*** {list3}")

আউটপুট

<প্রে>*** [600, 800, 1000, 1200]

এখন এখানে যা গুরুত্বপূর্ণ তা হল যোগ করা মানের প্রাপ্ত তালিকার (আমাদের ক্ষেত্রে তালিকা3) আইটেমগুলি তাদের সূচী দ্বারা উত্স তালিকার আইটেমগুলির সাথে সরাসরি সম্পর্কিত৷

এখন যতদূর জিপ করা যায়, এখানে একই তালিকা পূর্ণসংখ্যার জন্য একটি জিপ সমাধান রয়েছে। এই ক্ষেত্রে, পূর্ণসংখ্যার দুটি তালিকা, একটি 100, 200, 300 এবং 400 ধারণ করে, এবং একটি 500, 600, 700 এবং 800 ধারণ করে। এবং অবশ্যই, আমরা সেগুলিকে সংজ্ঞায়িত করতে পারি এবং তাদের ভেরিয়েবলগুলিতে বরাদ্দ করতে পারি। এবং তাদের তালিকা হতে হবে না।

এগুলি অন্যান্য সিকোয়েন্স হতে পারে, যেমন টিপলস, তাই।

তাই আমরা কি করতে যাচ্ছি তাদের থেকে উপাদান জোড়া একসাথে জিপ, তাই list1 থেকে 100 এবং list2 থেকে 500 একসাথে জিপ করা হবে, এবং তাই. প্রতিটি টিপলের জন্য, যেমন আমরা তাদের মাধ্যমে পুনরাবৃত্তি করি, আমরা টিপলটিকে a এবং b ভেরিয়েবলে আনপ্যাক করব।

list4 =[]list4 =[(a + b) এর জন্য a, b in zip(list1, list2)]print(f"আউটপুট \n*** {list4}")

আউটপুট

<প্রে>*** [600, 800, 1000, 1200]

এখন উপরের সমাধানটি সত্যিই দুর্দান্ত দেখাচ্ছে, তবে একটি গুরুতর সমস্যা রয়েছে যা আপনার কোডে প্রয়োগ করার আগে আপনাকে জানতে হবে৷

zip বিল্ট-ইন ফাংশন অদ্ভুতভাবে আচরণ করে যদি ইনপুট পুনরাবৃত্তিকারী বিভিন্ন দৈর্ঘ্যের হয়। আসুন তাদের চেষ্টা করুন।

# listlist1 এ একটি নতুন নম্বর যোগ করুন।append(1000)print(f"আউটপুট \n*** List1 এর দৈর্ঘ্য হল {len(list1)} , List2 এর দৈর্ঘ্য হল {len(list2)}")# Addition.list5 =[(a + b) এর জন্য তালিকার বিপরীতে জিপ চালান, zip-এ b(list1, list2)]print(f"*** {list5}")

আউটপুট

*** তালিকা 1-এর দৈর্ঘ্য হল 9, তালিকা 2-এর দৈর্ঘ্য হল 4*** [600, 800, 1000, 1200]

এখন যখন আমরা তালিকা3 থেকে প্রতিটি যোগ করা নম্বর প্রিন্ট আউট করি তখন আপনি লক্ষ্য করবেন যে তালিকা 1 এ যোগ করা নম্বরটি অনুপস্থিত, যদিও আমরা এটি সেখানে যুক্ত করেছি এবং এটি তালিকা 1-এ আছে এটি জিপের আউটপুটে দেখা যাচ্ছে না।

এবং এই ঠিক কিভাবে জিপ কাজ করে. এটি আপনাকে টিপলে রাখে যতক্ষণ না যেকোনও ইটারেটর নিঃশেষ হয়ে যায়। তাই যদিও list1 এর থেকে লিস্ট2 এর তুলনায় অনেক বেশি যেতে হবে, এটি প্রথমে নিঃশেষ হয়ে যায় এবং তারপর লুপটি বেরিয়ে যায়।

আশ্চর্যজনকভাবে, আপনি কোন ব্যতিক্রম সঙ্গে বিজ্ঞপ্তি দেওয়া হয় না. তাই আপনাকে জিপ উৎপাদনে খুব সতর্ক থাকতে হবে।

আপনার কাছে পাইথন ফাংশনে এই সমস্যার জন্য একটি বিকল্প রয়েছে যাকে zip longest বলা হয়।

এই জিপটি দীর্ঘতম কি, এটি চলতে থাকে এমনকি যখন একটি পুনরাবৃত্তিকারী নিঃশেষ হয়ে যায়।

itertools থেকে আমদানি করুন zip_longestlist6 =[]a, b-এর জন্য zip_longest(list1, list2):যদি b None হয়:print(f" <<এখানে আপনার যুক্তি দেখান>>")elif a is None:print(f") <<আপনার যুক্তি এখানে করুন>> ")else:list6.append(a + b)print(f"আউটপুট \n*** {list6}")


<<এখানে আপনার যুক্তি করুন>><<আপনার যুক্তি এখানে করুন>><<আপনার যুক্তি এখানে করুন>><<আপনার যুক্তি এখানে করুন>><<আপনার যুক্তি এখানে করুন>>

আউটপুট

<প্রে>*** [600, 800, 1000, 1200]

উপসংহার:

  • আপনি যদি সমান্তরালভাবে একাধিক পুনরাবৃত্তির উপর পুনরাবৃত্তি করতে চান তাহলে জিপ ফাংশনটি খুব সহজ৷

  • আপনি যখন বিভিন্ন দৈর্ঘ্যের পুনরাবৃত্তিকারী পাস করেন তখন জিপ ফাংশন ভিন্নভাবে কাজ করে।

  • আপনি যদি বিভিন্ন দৈর্ঘ্যের পুনরাবৃত্তি ব্যবহার করতে চান তাহলে zip_longest দিয়ে যান।


  1. কিভাবে জাভাস্ক্রিপ্ট ব্যবহার করে একটি <select> তালিকা আইটেম পূর্বনির্বাচন করবেন?

  2. কিভাবে জাভাস্ক্রিপ্ট ব্যবহার করে একটি এইচটিএমএল তালিকা সাজান?

  3. কিভাবে LINQ C# ব্যবহার করে একটি তালিকা সমতল করবেন?

  4. কিভাবে জাভা 9 এ ProcessBuilder ব্যবহার করে একটি প্রক্রিয়া তৈরি করবেন?