# আবারও লিস্ট

**স্বাভাবিক স্লাইস**\
আমরা আগে দেখেছি লিস্ট থেকে কিভাবে ইনডেক্স দিয়ে একটি মাত্র ভ্যালু অ্যাক্সেস করা যায়। এখন দেখবো কিভাবে একটি লিস্টকে ভাগ করে আরেকটি লিস্ট তৈরি করা যায় অথবা অন্যভাবে বলতে গেলে কিভাবে একটি লিস্ট থেকে একাধিক ভ্যালু নিয়ে আরেকটি লিস্ট হিসেবে অ্যাক্সেস করা যায়। এ কাজের জন্য `[]` এর মধ্যে শুধুমাত্র একটি ইনডেক্স না লিখে বরং কোলন দিয়ে একাধিক ইনডেক্স লিখতে হয়।

উদাহরণ,

```python
some_marks = [2, 4, 6, 32, 60, 65, 69, 76, 80, 85, 90]

avg_marks = some_marks[4:8]
print(avg_marks)

good_marks = some_marks[8:]
print(good_marks)

poor_marks = some_marks[:4]
print(poor_marks)
```

উপরের প্রোগ্রামে আমরা `some_marks` লিস্ট থেকে স্লাইস করে বিভিন্ন সাব লিস্ট পেয়েছি। যেমন প্রথমে আমরা চতুর্থ ইনডেক্স থেকে শুরু করে অষ্টম ইনডেক্স পর্যন্ত নিয়েছি। দ্বিতীয় প্রিন্টের মধ্যে আমরা অষ্টম ইনডেক্স থেকে শুরু করে শেষ পর্যন্ত এলিমেন্ট গুলো নিয়েছি। আর তৃতীয় প্রিন্টের মধ্যে আমরা শুরু থেকে চতুর্থ ইনডেক্স পর্যন্ত ভ্যালু গুলো নিয়েছি।

> লিস্ট থেকে স্লাইস করার সময় কোলনের দু পাশে দুটো ইনডেক্স ব্যবহার করলে, বাম পাশের ইনডেক্সের ভ্যালু ইনক্লুড থাকে কিন্তু ডান পাসের ইনডেক্সের ভ্যালু ইনক্লুড হয় না। ব্যাপারটা `range` এর মতই।

উপরের প্রোগ্রামের আউটপুট,

```
[60, 65, 69, 76]
[80, 85, 90]
[2, 4, 6, 32]
```

**ইনডেক্স জাম্প**\
লিস্ট স্লাইসের সময় শুরু ও শেষ ইনডেক্স বাদে ধাপও উল্লেখ করে দেয়া যায়। অর্থাৎ, উল্লেখিত ইনডেক্সের মধ্যবর্তী ভ্যালু গুলো সিলেক্ট হবে কিন্তু সেখান থেকে উল্লেখিত ধাপ পরিমাণ ইনডেক্স জাম্প করে করে ভ্যালু নেয়া হবে। যেমন -

```python
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(numbers[2:9:3])
```

আউটপুট,

```python
[3, 6, 9]
```

এখানে `numbers` লিস্ট থেকে দ্বিতীয় এবং নবম ইনডেক্সের মধ্যবর্তী ভ্যালু গুলো নেয়া হয়েছে কিন্তু প্রতিবার তিনটি করে স্টেপ জাম্প করে।

**নেগেটিভ ইনডেক্স স্লাইস**\
আমরা দেখেছি কিভাবে শুরু ও শেষ ইনডেক্স নির্ধারণ করে দিয়ে, একটি লিস্ট থেকে মধ্যবর্তী কিছু ভ্যালু নিয়ে এর স্লাইস তৈরি করা যায়। চাইলে এভাবে স্লাইস না করে - মুল লিস্টের শুরুর ইনডেক্স নির্ধারণ করে দিয়ে এবং শেষ থেকে উল্টা ইনডেক্স নির্ধারণ করে দিয়েও একটি স্লাইসড লিস্ট পাওয়া যায়।

উদাহরণ,

```python
squares = [1, 2, 5, 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 4, 6, 7, 8]
print(squares[3:-4])
```

আউটপুট,

```python
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
```

`squares[3:-4]` এর মাধ্যমে আমরা এই লিস্ট থেকে স্লাইস করার জন্য শুরুর ইনডেক্স বলে দিয়েছি `3` এবং লিস্টের শেষ থেকে হিসেবে শুরু করে চতুর্থ ইনডেক্সকে নির্ধারণ করে দিয়েছি স্লাইস করার শেষ ইনডেক্স হিসেবে।

**লিস্ট রিভার্স**\
যদি একটি লিস্ট থেক স্লাইস তৈরি করার সময় স্টেপ হিসেবে নেগেটিভ ভ্যালু সেট করা হয় (দ্বিতীয় কোলনের ডান পাশে) এবং মুল লিস্টের সব ভ্যালুকেই সিলেক্ট করে নিতে বলা হয় (প্রথম কোলনের দু পাশে ইনডেক্স উল্লেখ্য না করে) তাহলে বস্তুত মুল লিস্টের একটি রিভার্স বা উল্টো লিস্ট তৈরি হয়। নিচের উদাহরণটি দেখি -

```python
values = [3, 4, 5, 6, 7, 8]
print(values[::-1])
```

আউটপুট,

```python
[8, 7, 6, 5, 4, 3]
```

**লিস্টের উপর করা কিছু নিউমেরিক অপারেশন**\
আশা করছি নিচের উদাহরণটির মধ্যে থাকা কমেন্ট গুলো দেখেই সবাই বুঝতে পারবেন প্রত্যেকটি মজার এবং গুরুত্বপূর্ণ ফাংশনের কাজ -

```python
# Prints the minimum value among all the elements of the list below
print(min([1, 2, 3, 4, 0, 2, 1]))

# Prints the maximum value among all the elements of the following list
print(max([1, 4, 9, 2, 5, 6, 8]))

# Print sum of all the elements of the following list
print(sum([1, 2, 3, 4, 5]))
```

আউটপুট,

```python
0
9
15
```

> সংকলন - [নুহিল মেহেদী](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/data-types/more-list-opt.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.
