লিস্ট সবসময় সঠিক টুল নয়। একটি tuple আর একটি set প্রতিটি একটি লিস্টের একটি বৈশিষ্ট্য ছেড়ে দেয় দরকারি কিছুর বিনিময়ে।
একটি tuple একটি লিস্টের মতো দেখতে কিন্তু বন্ধনী ব্যবহার করে, আর একবার তৈরি হয়ে গেলে, এর কন্টেন্ট বদলানো যায় না:
point = (10, 20)
print(point[0]) # 10
# point[0] = 5 # TypeError — tuples don't support item assignmentএকটি tuple ব্যবহার করুন যখন মানের একটি নির্দিষ্ট, ছোট গ্রুপ তৈরি হওয়ার পর সত্যিকারভাবে বদলানো উচিত নয় — কোঅর্ডিনেট, একটি RGB রঙ, একাধিক মান রিটার্ন করা একটি ফাংশন:
def min_max(numbers):
return min(numbers), max(numbers) # returns a tuple
lowest, highest = min_max([4, 9, 1, 7]) # unpacked into two variables
print(lowest, highest) # 1 7একটি set স্বয়ংক্রিয়ভাবে ডুপ্লিকেট বাদ দেয় আর এর কোনো নিশ্চিত ক্রম নেই — যখন "এটা কি আছে" আর "কোনো পুনরাবৃত্তি নেই" ক্রমের চেয়ে বেশি গুরুত্বপূর্ণ তখন দরকারি:
numbers = {1, 2, 2, 3, 3, 3}
print(numbers) # {1, 2, 3} — duplicates are gone
print(3 in numbers) # True — checking membership is very fast on a setSet গণিতের সেটের মতো একই অপারেশন সাপোর্ট করে — দুটো কালেকশন তুলনা করার জন্য সত্যিকারভাবে দরকারি:
a = {1, 2, 3}
b = {2, 3, 4}
print(a | b) # {1, 2, 3, 4} — union: everything in either
print(a & b) # {2, 3} — intersection: in both
print(a - b) # {1} — difference: in a but not bcolors = {"red", "green"}
colors.add("blue") # adds one item
colors.remove("red") # removes it — raises an error if it isn't there
colors.discard("purple") # also removes it, but does nothing if it isn't thereআইটেমটি আছে কিনা নিশ্চিত না থাকলে .discard() বেশি নিরাপদ ডিফল্ট — .remove() তখনকার জন্য যখন এর অনুপস্থিতি নিজেই জানার মতো একটি বাগ হবে।
| টাইপ | কখন বেছে নেবেন |
|---|---|
| list | ক্রম গুরুত্বপূর্ণ, কন্টেন্ট বদলাবেন, ডুপ্লিকেট ঠিক আছে |
| tuple | ক্রম গুরুত্বপূর্ণ, কন্টেন্ট কখনো বদলানো উচিত নয় |
| set | ক্রম গুরুত্বপূর্ণ নয়, ডুপ্লিকেট অসম্ভব হওয়া উচিত |