সমস্যা বিবরণ
দুটি লিস্ট দেওয়া আছে। সব সম্ভাব্য পেয়ার (i, j) বানাতে হবে যেখানে i প্রথম লিস্ট থেকে, j দ্বিতীয় লিস্ট থেকে, এবং i ≠ j।
উদাহরণ
list_1 = [1, 2, 3, 4, 5]
list_2 = [5, 8, 7, 1, 3, 6]
Output: [(1, 5), (1, 8), (1, 7), (1, 3), (1, 6), (2, 5), ... (5, 6)]
# মোট ২৬টি পেয়ার (5×6 - ৪টি সমান পেয়ার বাদ)
পদ্ধতি ১: লিস্ট কম্প্রিহেনশন (সেরা)
list_1 = [1, 2, 3, 4, 5]
list_2 = [5, 8, 7, 1, 3, 6]
result = [(i, j) for i in list_1 for j in list_2 if i != j]
print(result)
পদ্ধতি ২: itertools.product + ফিল্টার
import itertools
list_1 = [1, 2, 3, 4, 5]
list_2 = [5, 8, 7, 1, 3, 6]
pairs = itertools.product(list_1, list_2) # কার্তেসিয়ান প্রোডাক্ট
result = [pair for pair in pairs if pair[0] != pair[1]]
print(result)
তুলনা
| পদ্ধতি | রিডেবিলিটি | পারফরম্যান্স | মেমরি |
|---|---|---|---|
| List Comprehension | উচ্চ | দ্রুত | O(n×m) |
| itertools.product | মিডিয়াম | সमान | O(1) এক্সট্রা (জেনারেটর) |
বड़े ডেটাসেটের জন্য জেনারেটর ভার্সন
def generate_pairs(list_1, list_2):
for i in list_1:
for j in list_2:
if i != j:
yield (i, j)
# মেমরি দক্ষ - একবারে একটা
for pair in generate_pairs(list_1, list_2):
print(pair) # প্রসেস করুন
উপসংহার
- ছোট/মিডিয়াম লিস্টের জন্য **লিস্ট কম্প্রিহেনশন** সেরা
- বড় লিস্ট বা স্ট্রিমিং প্রসেসিং জন্য **জেনারেটর** বা **itertools**
- কন্ডিশন
i != jফিল্টার হিসেবে কাজ করে