# সেট

&#x20;এই চ্যাপ্টারটি সর্বশেষ হালনাগাদ হয়েছেঃ সময়ে

লিস্ট এবং ডিকশনারির মতই সেটও এক ধরনের ডাটা স্ট্রাকচার। { } ব্র্যাকেট অথবা set ফাংশন ব্যবহার করে সেট তৈরি করা যায়। লিস্টের মতই কিছু ফাংশন সেট এরও আছে যেমন in ব্যবহার করে কোন এলিমেন্ট এর অস্তিত্ব চেক করা।

সাধারণ গণিতের সেট এর সাথে এই সেট এর অনেক মিল আছে। আমরা পরবর্তীতে কিছু উদাহরণ এর মাধ্যমে সেগুলো দেখবো।

যেমন,

```python
num_set = {1, 2, 3, 4, 5}
word_set = set(["spam", "eggs", "sausage"])

print(3 in num_set)
print("spam" not in word_set)
```

আউটপুট,

```python
True
False
```

মজার ব্যাপার হচ্ছে, ফাকা সেট তৈরি করার সময় { } ব্যবহার করা যাবে না কারণ এটা ফাকা ডিকশনারি তৈরি করার সাথে কনফ্লিক্ট করে। বরং set() ব্যবহার করে ফাকা সেট তৈরি করতে হয়।

**সেটের কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য**

* সেটের এলিমেন্ট গুলোর কোন ক্রম নেই অর্থাৎ এদেরকে ইন্ডেক্সিং করা যায় না
* একটি সেটে একই এলিমেন্ট একাধিক বার থাকতে পারে না
* একটি এলিমেন্ট কোন একটি সেটের অংশ কিনা সেটা খুব দ্রুত চেক করা যায়, লিস্ট এর তুলনায়

সেটের উপর কিছু অপারেশন নিচের মত করা যায়,

```python
# Has some duplicate eliments such as 1
nums = {1, 2, 1, 3, 1, 4, 5, 6}
print(nums)

# To add an eliment to the set
nums.add(-7)

# To remove an element to the set
nums.remove(3)
print(nums)
```

আউটপুট,

```python
{1, 2, 3, 4, 5, 6}
{1, 2, 4, 5, 6, -7}
```

সেটের বৈশিষ্ট্য থেকে সহজেই অনুমান করা যায়, মেম্বারশিপ টেস্ট, এবং ডুপ্লিকেট এলিমেন্ট রিমুভ করার জন্য set() এর ব্যাবহার উপযুক্ত।

**গণিতের সাথে তুলনীয় কিছু অপারেশন**

সাধারণ গণিতে সেট এ যেমন ইউনিয়ন, ইন্টারসেকশন, ডিফারেন্স ইত্যাদি অপারেশন গুলো আছে, তেমনি পাইথনের সেটেও এই অপারেশন গুলো ভ্যালিড।

ইউনিয়ন = |\
ইন্টারসেকশন = &\
ডিফারেন্স = -\
সিমেট্রিক ডিফারেন্স = ^

উদাহরণ,

```python
first = {1, 2, 3, 4, 5, 6}
second = {4, 5, 6, 7, 8, 9}

print(first | second)
print(first & second)
print(first - second)
print(second - first)
print(first ^ second)
```

আউটপুট,

```python
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{4, 5, 6}
{1, 2, 3}
{8, 9, 7}
{1, 2, 3, 7, 8, 9}
```

**কিছু সিদ্ধান্ত**

ইতোমধ্যে আমরা জেনেছি পাইথনে যে ডাটা স্ট্রাকচার গুলো আছে সেগুলো হচ্ছে - লিস্ট, ডিকশনারি, টাপল এবং সেট। কিন্তু একটা দ্বিধা দ্বন্দ্ব সব সময় কাজ করতে পারে - কোন সময় কোন ধরনের ডাটা স্ট্রাকচার ব্যবহার করা উচিৎ।

নিচের অনুসিদ্ধান্ত গুলো কাজে আসতে পারে,

* ডিকশনারি -
  * যখন key-value জোড় এর মাধ্যমে বেশ কিছু ভ্যালু নিয়ে কাজ করতে হবে
  * যখন key এর উপর ভিত্তি করে ডাটা খুঁজে নেয়ার প্রয়োজন পর্বে বেশি
  * যখন তখন ডাটা গুলোর পরিবর্তন দরকার পরলে
* লিস্ট -
  * যখন ডাটা গুলোর র‍্যান্ডোম অ্যাক্সেস দরকার পরবে এবং তা আমরা খুব সহজে ইনডেক্স ধরে করতে পারি ।&#x20;
  * সাধারণ একটি iterable দরকার হলে লিস্ট নিয়ে কাজ করা যেতে পারে
* সেট -
  * যখন এলিমেন্ট গুলোর মধ্যে ইউনিকনেস দরকার পরবে।
  * যখন ডাটা গুলোর র‍্যান্ডোম অ্যাক্সেস দরকার পরবে না।
* টাপল -
  * যখন ডাটা পরিবর্তনের দরকার একদমই পরবে না। টাপল immutable.

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