অধ্যায় 2 · Python-এর মৌলিক বিষয়
লিস্ট, টাপল, ডিকশনারি ও সেট
- পৃষ্ঠা 5 / 20
- 4 মিনিট পড়া
আসল ডেটা আসে দল বেঁধে: ডকুমেন্টের তালিকা, চ্যাটের ইতিহাস, একটা API কলের সেটিং। এগুলো রাখার জন্য Python-এ চারটা বিল্ট-ইন কালেকশন আছে। এই চারটা বুঝলে AI API যে ডেটা পাঠায় আর নেয়, তা আপনি পড়তে পারবেন।
| টাইপ | দেখতে | ক্রম আছে? | বদলানো যায়? | কিসের জন্য |
|---|---|---|---|---|
list | [1, 2, 3] | হ্যাঁ | হ্যাঁ | আইটেমের ধারা: ডকুমেন্ট, স্কোর, মেসেজ |
tuple | (1, 2) | হ্যাঁ | না | নির্দিষ্ট দল: একটা স্থানাঙ্ক, (নাম, স্কোর) জোড়া |
dict | {"a": 1} | হ্যাঁ (যোগ করার ক্রমে) | হ্যাঁ | নাম দেওয়া ঘর: একটা মেসেজ, একটা কনফিগ |
set | {1, 2} | না | হ্যাঁ | অনন্য আইটেম, দ্রুত "আছে কি?" যাচাই |
লিস্ট
লিস্ট তৃতীয় বন্ধনীর ভেতরে ক্রমানুসারে আইটেম রাখে। ইনডেক্সিং আর স্লাইসিং স্ট্রিংয়ের মতোই — কিন্তু স্ট্রিংয়ের মতো নয়, লিস্ট বদলানো যায়:
models = ["gpt-5.5", "claude-opus-5-5", "gemini"]
print(models[0]) # প্রথম আইটেম
print(len(models)) # কয়টা আইটেম
models.append("llama") # শেষে যোগ
models[2] = "gemini-pro" # একটা আইটেম বদলানো
models.remove("llama") # মান দিয়ে বাদ দেওয়া
print(models)
print("claude-opus-5-5" in models)
print(sorted([3, 1, 2]))
print(sum([10, 20, 30]), max([4, 9, 2]), min([4, 9, 2]))gpt-5.5
3
['gpt-5.5', 'claude-opus-5-5', 'gemini-pro']
True
[1, 2, 3]
60 9 2টাপল
টাপল হলো এমন লিস্ট, যা বদলানো যায় না। দলটার অর্থ নির্দিষ্ট হলে টাপল ব্যবহার করুন। এক লাইনেই টাপলকে আলাদা আলাদা ভেরিয়েবলে আনপ্যাক করা যায়:
point = (23.81, 90.41) # ঢাকার অক্ষাংশ, দ্রাঘিমাংশ
lat, lon = point # আনপ্যাকিং
print(lat, lon)
point[0] = 0 # টাপল বদলানো যায় না23.81 90.41
Traceback (most recent call last):
File "main.py", line 5, in <module>
point[0] = 0 # টাপল বদলানো যায় না
~~~~~^^^
TypeError: 'tuple' object does not support item assignmentডিকশনারি
ডিকশনারি (dict) রাখে key → value জোড়া। মান খুঁজতে হয় অবস্থান দিয়ে নয়, key দিয়ে। AI-এর কাজে এটাই সবচেয়ে জরুরি কালেকশন, কারণ প্রতিটা AI API যে JSON ব্যবহার করে, Python-এ সেটা ডিকশনারি হয়ে যায়:
message = {"role": "user", "content": "What is a token?"}
print(message["role"])
print(message.get("name", "anonymous")) # key না থাকলে একটা ডিফল্ট মান
message["content"] = "Explain tokens simply."
message["language"] = "en" # নতুন key যোগ
print(message)
for key, value in message.items():
print(key, "->", value)user
anonymous
{'role': 'user', 'content': 'Explain tokens simply.', 'language': 'en'}
role -> user
content -> Explain tokens simply.
language -> enkey না থাকলে message["name"] একটা KeyError দিয়ে থেমে যেত; message.get("name", default) তার বদলে ডিফল্ট মান দেয়। key না-ও থাকতে পারে এমন ক্ষেত্রে — যেমন ইন্টারনেট থেকে আসা ডেটায় — সবসময় .get() ব্যবহার করুন।
একটার ভেতরে আরেকটা: ডিকশনারির লিস্ট
কালেকশনের ভেতরে অন্য কালেকশন থাকতে পারে। ঠিক এই আকারেই — মেসেজ-ডিকশনারির একটা লিস্ট — একটা চ্যাট কথোপকথন LLM-কে পাঠানো হয়:
conversation = [
{"role": "system", "content": "You are a helpful tutor."},
{"role": "user", "content": "What is Python?"},
{"role": "assistant", "content": "A popular programming language."},
]
print(len(conversation))
print(conversation[1]["content"])
print(conversation[-1]["role"])3
What is Python?
assistantconversation[1]["content"] বাঁ থেকে ডানে পড়ুন: লিস্টের ১ নম্বর আইটেম নাও (একটা dict), তারপর তার "content" মান।
সেট
সেট শুধু অনন্য (unique) আইটেম রাখে। ডুপ্লিকেট বাদ দেওয়ার সবচেয়ে দ্রুত উপায় হলো লিস্টকে সেটে রূপান্তর করা, আর সেটে গণিতের মতো অপারেশনও চলে:
words = "the cat and the dog and the bird".split()
unique = set(words)
print(len(words), len(unique))
print(sorted(unique))
seen_a = {"python", "numpy", "pandas"}
seen_b = {"pandas", "pytorch"}
print(seen_a & seen_b) # দুটোতেই আছে
print(sorted(seen_a | seen_b)) # যেকোনো একটায়8 5
['and', 'bird', 'cat', 'dog', 'the']
{'pandas'}
['numpy', 'pandas', 'python', 'pytorch']সেটের কোনো ক্রম নেই, তাই প্রিন্ট করার আগে সেটটাকে sorted()-এ মুড়ে নিয়েছি।
একটা ফাঁদ: দুটো নাম, একটাই লিস্ট
লিস্টকে নতুন ভেরিয়েবলে রাখলে কপি হয় না। দুটো নামই একই লিস্টকে নির্দেশ করে:
a = [1, 2, 3]
b = a # b হলো একই লিস্টের আরেকটা নাম
b.append(4)
print(a)
c = a.copy() # আলাদা একটা কপি
c.append(5)
print(a, c)[1, 2, 3, 4]
[1, 2, 3, 4] [1, 2, 3, 4, 5]স্বাধীন কপি লাগলে .copy() (অথবা list(a)) ব্যবহার করুন। ডিকশনারির ক্ষেত্রেও একই কথা।
নিজে চেষ্টা করুন
- নিজের বর্ণনা দিয়ে একটা ডিকশনারি বানান (
name,city,skills— skills হবে একটা লিস্ট) আর আপনার একটা দক্ষতা প্রিন্ট করুন। - একটা system মেসেজ আর দুটো user মেসেজ দিয়ে একটা কথোপকথনের লিস্ট বানান, তারপর শুধু user মেসেজগুলোর content প্রিন্ট করুন।
tags = ["ai", "python", "ai", "data", "python"]থেকে অনন্য ট্যাগগুলো বর্ণানুক্রমে প্রিন্ট করুন।