নিম্নলিখিত প্রতিটি ক্ষেত্রে পাইথনে একটি তালিকা (অ্যারে) এর ডুপ্লিকেট উপাদান (সমস্ত উপাদান অনন্য/অদ্বিতীয়) আছে কিনা তা কীভাবে নির্ধারণ করবেন তার একটি বর্ণনা রয়েছে।
- উপাদানে কোন তালিকা ছাড়া একটি তালিকার জন্য
- উপাদানগুলির তালিকা সহ তালিকার জন্য (দ্বি-মাত্রিক অ্যারে, তালিকার তালিকা ইত্যাদি)
একটি তালিকা থেকে ডুপ্লিকেট উপাদানগুলি কীভাবে সরাতে বা বের করতে হয় সে সম্পর্কে নিম্নলিখিত নিবন্ধটি দেখুন।
নোট করুন যে তালিকাগুলি বিভিন্ন ধরণের ডেটা সঞ্চয় করতে পারে এবং অ্যারে থেকে কঠোরভাবে আলাদা। আপনি যদি মেমরির আকার এবং মেমরির ঠিকানা বা বড় ডেটার সংখ্যাগত প্রক্রিয়াকরণের প্রয়োজন হয় এমন প্রক্রিয়াগুলিতে অ্যারেগুলি পরিচালনা করতে চান তবে অ্যারে (স্ট্যান্ডার্ড লাইব্রেরি) বা NumPy ব্যবহার করুন।
তালিকায় ডুপ্লিকেট উপাদান আছে কিনা তা নির্ধারণ করুন (যদি উপাদানটির কোনো তালিকা না থাকে)
যদি উপাদানটিতে একটি আপডেটযোগ্য বস্তু যেমন একটি তালিকা না থাকে, তাহলে সেট সেট প্রকারের কনস্ট্রাক্টর সেট() ব্যবহার করুন।
সেট টাইপ হল একটি ডাটা টাইপ যার কোন ডুপ্লিকেট উপাদান নেই। যখন একটি তালিকা কনস্ট্রাক্টর সেট() এ পাস করা হয়, তখন ডুপ্লিকেট মানগুলি উপেক্ষা করা হয় এবং উপাদান হিসাবে শুধুমাত্র অনন্য মান সহ সেটের একটি বস্তু ফেরত দেওয়া হয়।
এই সেট টাইপ অবজেক্টের উপাদানের সংখ্যা এবং মূল তালিকা বিল্ট-ইন ফাংশন len() ব্যবহার করে প্রাপ্ত এবং তুলনা করা হয়।
- উপাদানের সংখ্যা সমান হলে, মূল তালিকায় কোনো সদৃশ উপাদান নেই
- উপাদানের সংখ্যা ভিন্ন হলে ডুপ্লিকেট উপাদানগুলি মূল তালিকায় অন্তর্ভুক্ত করা হয়
যে ফাংশনগুলো কোনো ডুপ্লিকেট উপাদান না থাকলে মিথ্যা ফেরত দেয় এবং ডুপ্লিকেট উপাদান থাকলে সত্য প্রদান করে
def has_duplicates(seq):
return len(seq) != len(set(seq))
l = [0, 1, 2]
print(has_duplicates(l))
# False
l = [0, 1, 1, 2]
print(has_duplicates(l))
# True
উদাহরণ একটি তালিকা, কিন্তু একই ফাংশন tuples সঙ্গে ব্যবহার করা যেতে পারে.
পরিবর্তনযোগ্য (আপডেটযোগ্য) অবজেক্ট যেমন তালিকাগুলি টাইপ সেটের উপাদান হতে পারে না। অতএব, উপাদান হিসাবে তালিকা সহ তালিকা (দ্বি-মাত্রিক অ্যারে, তালিকার তালিকা, ইত্যাদি) একটি TypeError হবে। পাল্টা ব্যবস্থা নীচে দেখানো হয়েছে.
l_2d = [[0, 1], [1, 1], [0, 1], [1, 0]]
# print(has_duplicates(l_2d))
# TypeError: unhashable type: 'list'
তালিকায় ডুপ্লিকেট উপাদান আছে কিনা তা নির্ধারণ করুন (যদি উপাদানটির একটি তালিকা থাকে)
উপাদানগুলির একটি তালিকা (যেমন তালিকার তালিকা) সহ একটি তালিকার ক্ষেত্রে ডুপ্লিকেট উপাদান আছে কিনা তা নির্ধারণ করতে নিম্নলিখিত ফাংশনগুলি ব্যবহার করা যেতে পারে।
def has_duplicates2(seq):
seen = []
unique_list = [x for x in seq if x not in seen and not seen.append(x)]
return len(seq) != len(unique_list)
l_2d = [[0, 0], [0, 1], [1, 1], [1, 0]]
print(has_duplicates2(l_2d))
# False
l_2d = [[0, 0], [0, 1], [1, 1], [1, 1]]
print(has_duplicates2(l_2d))
# True
সেট() এর পরিবর্তে, তালিকা বোঝার স্বরলিপি একটি তালিকা তৈরি করে যার উপাদানগুলি শুধুমাত্র অনন্য মান, এবং উপাদানগুলির সংখ্যা তুলনা করা হয়। বিস্তারিত জানার জন্য নিম্নলিখিত নিবন্ধ দেখুন.
এই ফাংশনটি সেই তালিকাগুলির জন্যও বৈধ যেগুলিতে উপাদানগুলির একটি তালিকা নেই৷
l = [0, 1, 2]
print(has_duplicates2(l))
# False
l = [0, 1, 1, 2]
print(has_duplicates2(l))
# True
এখন পর্যন্ত উদাহরণ হল উপাদানগুলির তালিকাটি নকল করা হয়েছে কিনা তা নির্ধারণ করা (একই তালিকা রয়েছে)।
মূল তালিকাকে এক মাত্রায় সমতল করার পরে প্রতিটি তালিকার ওভারল্যাপের উপাদানগুলি নির্ধারণ করা যেতে পারে কিনা।
l_2d = [[0, 1], [2, 3]]
print(sum(l_2d, []))
# [0, 1, 2, 3]
print(has_duplicates(sum(l_2d, [])))
# False
l_2d = [[0, 1], [2, 0]]
print(has_duplicates(sum(l_2d, [])))
# True
এখানে, তালিকা সমতল করতে sum() ব্যবহার করা হয়েছে, তবে itertools.chain.from_iterable()ও ব্যবহার করা যেতে পারে। উপরন্তু, তিন বা ততোধিক মাত্রার একটি তালিকা সমতল করার সময়, একটি নতুন ফাংশন সংজ্ঞায়িত করা প্রয়োজন।