দেখে মনে হচ্ছে ওপি কেবল দুটি ভেরিয়েবলের ক্ষেত্রেই উদ্বিগ্ন ছিল, তবে স্ট্যাকওভারফ্লো যেহেতু পরে একই প্রশ্নটি অনুসন্ধান করে তাদের জন্যও, আমি এখানে জেনেরিক কেসটি কিছুটা বিশদভাবে সমাধান করার চেষ্টা করব; এক পূর্ববর্তী উত্তর ইতিমধ্যে একটি জেনেরিক উত্তর ব্যবহার রয়েছে itertools.permutations(), কিন্তু যে পদ্ধতি বিশালাকার O(N*N!)তুলনা, যেহেতু আছে N!সঙ্গে একাধিক বিন্যাসন Nআইটেম প্রতিটি। (এটি এই উত্তরের মূল প্রেরণা ছিল)
প্রথমে সংক্ষেপে বলা যাক পূর্ববর্তী উত্তরের কয়েকটি পদ্ধতি জেনেরিক ক্ষেত্রে কীভাবে প্রয়োগ করা হয়, এখানে উপস্থাপিত পদ্ধতির অনুপ্রেরণা হিসাবে। আমি ব্যবহার করছি Aউল্লেখ করতে (x, y)এবং Bউল্লেখ করতে (a, b), নির্বিচারে (কিন্তু সমান) দৈর্ঘ্যের tuples হতে পারে।
set(A) == set(B)দ্রুত, তবে কেবল তখনই কাজ করে যদি মানগুলি হ্যাশযোগ্য হয় এবং আপনি গ্যারান্টি দিতে পারবেন যে কোনও একটি টিপলে কোনও নকল মান নেই। (উদাহরণস্বরূপ {1, 1, 2} == {1, 2, 2}, @ ড্যানিয়েল মেসেজোর জবাবের নীচে @ ব্যবহারকারী 2357112 দ্বারা নির্দেশিত হিসাবে)
পূর্ববর্তী পদ্ধতিটি সেটগুলির পরিবর্তে গণনা সহ অভিধান ব্যবহার করে সদৃশ মানগুলির সাথে কাজ করার জন্য প্রসারিত হতে পারে: (এটি এখনও সীমাবদ্ধতা রয়েছে যে সমস্ত মানগুলি হ্যাশেবল হওয়া দরকার, যেমন, যেমন: পরিবর্তনীয় মানগুলি যেমন listকাজ করবে না)
def counts(items):
d = {}
for item in items:
d[item] = d.get(item, 0) + 1
return d
counts(A) == counts(B)
sorted(A) == sorted(B)হ্যাশেবল মানগুলির প্রয়োজন হয় না, তবে এটি কিছুটা ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে উন্নত হয়। (সুতরাং যেমন। complexকাজ করবে না)
A in itertools.permutations(B)হ্যাশেবল বা অরিডেবল মানগুলির প্রয়োজন হয় না, তবে ইতিমধ্যে উল্লিখিত মতো এর O(N*N!)জটিলতা রয়েছে, তাই মাত্র ১১ টি আইটেমের সাথেও এটি শেষ হতে এক সেকেন্ড সময় নিতে পারে।
সুতরাং, সাধারণ হওয়ার মতো কোনও উপায় আছে তবে এটি কি যথেষ্ট দ্রুত হয়? হ্যাঁ, "ম্যানুয়ালি" যাচাই করে প্রতিটি আইটেমের সমান পরিমাণ রয়েছে: (এটির জটিলতা হ'ল O(N^2)এটি বড় ইনপুটগুলির পক্ষেও ভাল নয়; আমার মেশিনে 10 কে আইটেম একটি সেকেন্ডও নিতে পারে - তবে সাথে 10 টি আইটেমের মতো ছোট ইনপুটগুলি এটি অন্যদের মতোই দ্রুত)
def unordered_eq(A, B):
for a in A:
if A.count(a) != B.count(a):
return False
return True
সেরা পারফরম্যান্স পেতে, কেউ dictপ্রথমে sortedবেসড পদ্ধতিটি চেষ্টা করে দেখতে পারেন, যদি অসাধ্যযোগ্য মানগুলির কারণে ব্যর্থ হয় তবে বেসড countপদ্ধতিতে ফিরে যান এবং অবশেষে যদি বেসড পদ্ধতিতে ব্যর্থ হয় তবে বেসড পদ্ধতিতে ফিরে যান ।
x,y, a,b: এগুলি কি ইনটস / ফ্লোট / স্ট্রিং, স্বেচ্ছাসেবী বস্তু বা কী? যদি সেগুলি অন্তর্নির্মিত ধরণের ছিলx,yএবং উভয় এবং সজ্জিতভাবে রাখা সম্ভব ছিলa,b, তবে আপনি দ্বিতীয় শাখাটি এড়াতে পারবেন। নোট করুন যে একটি সেট তৈরি করার ফলে চারটি উপাদানগুলির প্রত্যেককেইx,y, a,bধাবিত হবে, যা তুচ্ছ বা নাও হতে পারে বা তারা কী ধরণের বস্তুগুলির উপর নির্ভর করে কোনও পারফরম্যান্সের সাথে জড়িত থাকতে পারে।