এটি একটি পুরানো প্রশ্ন তবে আমার পোস্ট করা উত্তরগুলি দেখে কিছু উত্তর আসলে zip
স্ক্রিপ্টযোগ্য নয় বলে কাজ করে না। অন্যান্য উত্তরগুলি বিরক্ত করে নাimport operator
এবং এখানে এই মডিউল এবং এর সুবিধা সম্পর্কে আরও তথ্য সরবরাহ করে না।
এই সমস্যার জন্য কমপক্ষে দুটি ভাল আইডিয়াম রয়েছে। আপনি সরবরাহ করেছেন উদাহরণ ইনপুট দিয়ে শুরু:
X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1 ]
90 এর দশকে পার্লে এই প্যাটার্নটি জনপ্রিয় করে তোলেন আর। শোয়ার্জ-এর পরে এটি শোয়ার্জিয়ান_ট্রান্সফর্ম হিসাবেও পরিচিত :
# Zip (decorate), sort and unzip (undecorate).
# Converting to list to script the output and extract X
list(zip(*(sorted(zip(Y,X)))))[1]
# Results in: ('a', 'd', 'h', 'b', 'c', 'e', 'i', 'f', 'g')
নোট করুন যে এই ক্ষেত্রে Y
এবং X
সাজানো এবং ডিকোসোগ্রাফিকভাবে তুলনা করা হয়। যে, প্রথম আইটেম (থেকে Y
) তুলনা করা হয়; এবং যদি সেগুলি একই হয় তবে দ্বিতীয় আইটেমগুলি (থেকে X
) তুলনা করা হবে ইত্যাদি। এটি অস্থির তৈরি করতে পারেডিক্সেলিকেটগুলি তাদের মূল ক্রমে রাখার জন্য যদি আপনি অভিধান সংক্রান্ত অর্ডারের জন্য মূল তালিকা সূচকগুলি অন্তর্ভুক্ত না করেন তবে আউটপুট ।
এটি আপনাকে কীভাবে ইনপুটটি বাছাই করতে দেয় তার উপর আরও সরাসরি নিয়ন্ত্রণ দেয়, যাতে আপনি নির্দিষ্ট কীটি বাছাই করে কেবল স্থিতিশীলতা বাছাই করতে পারেন। আরও উদাহরণ দেখুন এখানে ।
import operator
# Sort by Y (1) and extract X [0]
list(zip(*sorted(zip(X,Y), key=operator.itemgetter(1))))[0]
# Results in: ('a', 'd', 'h', 'b', 'c', 'e', 'i', 'f', 'g')