# লিস্ট ফাংশন

এই চ্যাপ্টারে আমরা লিস্ট নিয়ে কাজ করার জন্য এর কিছু বিল্ট-ইন মেথড এবং কিছু ফাংশনের ব্যবহার দেখবো। লিস্ট ম্যানিপুলেশনের জন্য কি কি মেথড এভেইলেবল আছে সেগুলো আমরা কিভাবে জানতে পারি? সে জন্য একটা ছোট্ট টি প্স দিচ্ছিঃ টার্মিনালে, IDLE -তে অথবা যেখানে পাইথন কোড রান করছেন সেখানে `dir(list)` লিখে এন্টার/রান/প্রিন্ট করে দেখতে পারেন। নিচের মত আউটপুট পেয়ে যাবেন -

```python
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
```

একটা লিস্ট রিটার্ন হয়েছে। তাই তো? শেষের দিকে খেয়াল করুন - `...append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']` অর্থাৎ এগুলো মেথড বিল্ট ইন আছে লিস্ট ম্যানিপুলেশনের জন্য। অর্থাৎ `list` অবজেক্টের সব গুলো অ্যাট্রিবিউট এবং মেথড এর তালিকা দেখার জন্য এটি ব্যবহার করতে পারেন। এটি শুধু যে list এর ক্ষেত্রেই কাজ করবে তা নয়। `dir()` এর মধ্যে অন্যান্য অবজেক্ট পাস করেই দেখুন না।

**append**\
যা হোক, তো আমরা জানতে পারলাম list এর মধ্যে `append`, `insert` ইত্যাদি করা যেতে পারে। তাহলে চলুন `append` ট্রাই করে দেখি। কিন্তু এটা কিভাবে কাজ করে সেটাও কারো কাছে না জিজ্ঞেস করেও জেনে নিতে পারেন। আরও একটা টিপ্স, রান করুন: `help(list.append)` আর নিচের মত আউটপুট আসবে -

```python
Help on method_descriptor:

append(...)
    L.append(object) -- append object to end
```

অর্থাৎ এই মেথডের কাজ কি সেটা দেখা যাচ্ছে এবং বলা আছে append object to end. অর্থাৎ কোন একটি লিস্টের শেষে নতুন এলিমেন্ট যুক্ত করতে এই মেথড ব্যবহার করা যাবে। তাহলে উদাহরণ দেখে নেই -

```python
nums = [1, 2, 3]
nums.append(4)
print(nums)
```

আউটপুট,

```python
[1, 2, 3, 4]
```

**insert**\
প্রায় একই রকম কিন্তু একটু আলাদা কারনে ব্যবহার করা যেতে পারে `insert` মেথড। নিচের মত করে -

```python
words = ["A", "C"]
index = 1
words.insert(index, "B")

print(words)
```

আউটপুট,

```python
['A', 'B', 'C']
```

অর্থাৎ, লিস্টের কোন একটি নির্দিষ্ট পজিশনে বা ইনডেক্সে কোন এলিমেন্ট যুক্ত করতে চাইলে `append` এ কাজ হবে না (কারন এটা শেষে যুক্ত করে) বরং `insert` ব্যবহার করতে হবে। `insert` মেথডের দুটো প্যারামিটার - প্রথমটি হচ্ছে লিস্টের কোন পজিশনে নতুন এলিমেন্ট যুক্ত করতে চান আর দ্বিতীয় প্যারামিটারটি হচ্ছে যে এলিমেন্ট যুক্ত করতে চান সেটি নিজেই। উপরের উদাহরণে, আমরা `words` লিস্টের দ্বিতীয় পজিশন তথা `1` ইনডেক্সে `B` কে যুক্ত করেছি।

**index**\
আরও একটি মেথডের ব্যবহার দেখি। যেমন - `index`. নিচের উদাহরণে আমরা যেকোনো একটি এলিমেন্ট লিস্টের কোন ইনডেক্সে অবস্থা করছে সেটা চেক করার জন্য `index` মেথড ব্যবহার করেছি।

```python
letters = ['p', 'q', 'r', 's', 'p', 'u']
print(letters.index('r'))
print(letters.index('p'))
print(letters.index('z'))
```

আউটপুট,

```python
2
0
ValueError: 'z' is not in list
```

**count**\
লিস্টের মধ্যে কোন একটি এলিমেন্ট মোট কতবার আছে তার সংখ্যা জানতে নিচের মত করে `count()` মেথডের ব্যবহার করা যেতে পারে,

```python
letters = ['p', 'q', 'r', 's', 'p', 'u']
letters.count('p')
```

আউটপুট,

```python
2
```

> এরকম সব গুলো মেথডের কাজ জেনে নিতে `help(list.METHOD_NAME)` এভাবে রান করে আউটপুট স্ক্রিন থেকে উক্ত মেথডের বিস্তারিত দেখে নিতে পারেন।

অবজেক্ট মেথড বাদেও লিস্ট এর জন্য কিছু উপকারী ফাংশন আছে। যেমন - `max(), min(), len()` ইত্যাদি. যেমন একটি লিস্টের মধ্যে থাকা এলিমেন্ট গুলোর মধ্যে থেকে বড়টি দেখে নিতে `max()` ফাংশনের ব্যবহার করা যেতে পারে। উদাহরণ,

```python
nums = [1, 2, 4, 20, 50, 3, 4]
max(nums)
```

আউটপুট,

```python
50
```

> সংকলন - [নুহিল মেহেদী](https://nuhil.net)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://python.howtocode.dev/control-structure/list-function.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
