Python List(পাইথন লিস্ট)

 

পাইথন লিস্ট কি?
পাইথনে যে কিছু ক্রম সংখ্যার ডাটা টাইপস রয়েছে তার মধ্যে অন্যতম জনপ্রিয় হল লিস্ট। লিস্ট এর মধ্যে একই সাথে বিভিন্ন ধরনের ডাটা ক্রমান্যয়ে রাখা যায়। এই ক্রমান্যয়ে রাখা ডাটা গুলো কে বলা হয় লিস্ট এর উপাদান। উপাদান গুলো কে ইনডেক্সিং এর মাধ্যমে পাওয়া যায়। নতুন যুক্ত কোন উপাদান লিস্ট এর শেষে যুক্ত হয়।
লিস্ট এর একটি উদাহরণ দেখে নেয়া যাকঃ
 
list = ['dhaka', True, 1997, {1, 2, 4}]
 
পাইথনে গুচ্ছ প্রক্রিয়াতে ডাটা রাখার ক্ষেত্রে প্রথমেই মাথায় আসে লিস্ট এর কথা, কারণ লিস্ট ডাইনামিক এবং একে যেমন ইচ্ছা তেমন ভাবে পরিবর্তন করা যায়, পরিবর্ধন করা যায়, সংকোচন করা যায়। পাইথন লিস্ট সাজানো গুছানো আলমিরার মত। আলমিরাতে যেমন বিভিন্ন ধরণের জিনিসপত্র সাজিয়ে রাখা যায় এবং প্রয়োজনের সময় চট করে বের করে নিয়ে এসে ব্যবহার করা যায়, লিস্ট এর ক্ষেত্রেও ঠিক তেমনটি করা যায়। লিস্ট এ বিভিন্ন ধরণের ডাটা একইসাথে সুন্দর করে গুছিয়ে রাখা যায় এবং যে কোন ডাটা কে যখন ইচ্ছা তখন বের করে নিয়ে ব্যবহার করা যায়। লিস্ট এর এমন আরো কিছু অতি দরকারী বৈশিষ্ট্য রয়েছে, চলো কয়েকটি বৈশিষ্ট্য জেনে রাখি-
 
লিস্ট এর কিছু বৈশিষ্ট্যঃ
  •  লিস্ট একটি অর্ডারড ডাটা স্ট্রাকচার।
  •  লিস্ট যে কোন ধরনের অবজেক্ট কে একই সাথে রাখার স্বাধীনতা দেয়।
  •  লিস্ট এর উপাদান ইনডেক্স দ্বারা অ্যাক্সেস করা যায়।
  •  লিস্ট যে কোন লেভেল পর্যন্ত নেস্টিং করা যায়।
  •  লিস্ট ডাইনামিক।
 
প্রধান কিছু বৈশিষ্ট্য তো দেখা হলো, এখন চলো এইসব নিয়ে একটু বিস্তারিত জেনে আসি-
 
১। লিস্ট একটি অর্ডারড ডাটা স্ট্রাকচারঃ
লিস্ট শুধু ডাটা গুচ্ছ নয়। লিস্ট এ রাখা ডাটা গুলো নির্দিষ্ট অর্ডার মেনে লিস্ট এ রাখা হয়। নির্দিষ্ট অর্ডারে রাখা উপাদান গুলোকে আমরা ক্রমান্বয়ে বা যে কোন একটি উপাদান কে তার অনন্য পরিচয় বহন করা ইনডেক্স এর মাধ্যমে প্রকাশ করতে পারি। ডাটা রাখার ক্রম অনুযায়ী লিস্ট প্রত্যেক টি উপাদান কে ইন্ডেক্স প্রদান করে. আগে লিস্ট এ যোগ হওয়া উপাদান এর ইনডেক্স থাকে কম এবং পরে যোগ হওয়া উপাদান এর ইনডেক্স থাকে বেশি।
যেমনঃ
 
list = ['dhaka', True, 1997, {1, 2, 4}]
for element in list:
    print('index:',list.index(element), ', element: ', element)

Output: 
index: 0 , element:  dhaka
index: 1 , element:  True
index: 2 , element:  1997
index: 3 , element:  {1, 2, 4}
 
 
২। লিস্ট যে কোন ধরনের অবজেক্ট কে একই সাথে রাখার স্বাধীনতা দেয়ঃ
লিস্টে যেমন একই ধরনের উপাদান কে একই সাথে সংরক্ষন করা যায় তেমন করে বিভিন্ন ধরনের উপাদান কে একই সাথে সংরক্ষনের স্বাধীনতা দেয়। এমনকি লিস্ট ফাংশন, ক্লাস এবং মডিউলের মতো জটিল অবজেক্ট ও থাকতে পারে। আরও মজার ব্যপার হল লিস্ট এ উপাদান সংরক্ষনের কোন নির্দিষ্ট লিমিট নেই। ইচ্ছামত লেন্থ এর ডাটা সংরক্ষন করা যায়।
 
#list with complex elements

# built in class
print('int as a built in class: ', int)

#built in function
print('len as a built in function: ', len)

#function 
def hello(): 
    print("hello") 
    print(hello)

#module
import math 
print(math) 
list = [int, len, hello, math] 
print("list: ", list)

Output: 
    int as a built in class: <class 'int'> 
    len as a built in function: <built-in function len> 
    <function hello at 0x7f9a73e61dc0> 
    <module 'math' (built-in)> 
    list: [<class 'int'>, <built-in function len>, <function hello at 0x7f9a73e61dc0>, <module 'math' (built-in)>] >
 
 
৩। লিস্ট এর উপাদান ইনডেক্স দ্বারা অ্যাক্সেস করা যায়ঃ
যেহেতু লিস্ট অর্ডারড, তাই, এর প্রতিটি উপাদান কে ইনডেক্স এর মাধ্যমে পাওয়া যায়। অ্যারে এর মত করে লিস্ট এর প্রত্যেকটি উপাদান কে তাদের ইন্ডেক্স এর মাধ্যমে প্রকাশ করা যায়। ইন্ডেক্সিং এর ধারণা প্রায় সব প্রোগ্রামিং ল্যাঙ্গুয়েজে এবং অনেক ক্রমজাতীয় ডাটা তে থাকলেও লিস্ট তোমাকে দেবে নেগেটিভ ইনডেক্সিং এর সুযোগ। নেগেটিভ ইন্ডেক্সিং এর মাধ্যমে লিস্ট এর উপাদান কে শেষের দিক থেকে বের করে আনা যায়, আবার, কোন লিস্ট এর লেন্থ না জেনেই তার শেষের উপাদান গুলোকে নিয়ে আসা যায়।
 
list = ['dhaka', True, 1997, {1, 2, 4}]
print(list[0])
print(list[3])

#negative indexing
print(list[-1])
print(list[-2])

Output: 
dhaka
{1, 2, 4}
{1, 2, 4}
1997
 
 
৪। লিস্ট যে কোন লেভেল পর্যন্ত নেস্টিং করা যায়ঃ
একটি ডাটার ভেতর ওপর একটি ডাটা রাখার প্রক্রিয়া কে নেস্টিং বলে। আমরা দেখেছি লিস্টে যে কোন অবজেক্ট রাখা যায়। তাই, লিস্ট এ অপর একটি লিস্ট কেও রাখা যায়। এইভাবে লিস্ট কে যে কোন লেভেল পর্যন্ত নেস্টিং করা যায়। যেমনঃ
 
list1 = [1, 2, 4, 8]
list2 = ["hello", "from", "space", list1]
list3 = ["list", "nesting", 101, list2]


print(list3)


## Output:
## ['list', 'nesting', 101, ['hello', 'from', 'space', [1, 2, 4, 8]]]
 
কী? খুব মজা হচ্ছে লিস্ট এ নেস্টিং করতে পেরে? এখন চলো দেখি, এত মজা করে যে নেস্টিং করলাম, এই নেস্টেড ডাটা কে কিভাবে বের করে আনব। একদম সহজ, তাই না? তুমি প্রথমে তোমার বাড়ির ভেতরে প্রবেশ করবা, তার পর তোমার রুমে প্রবেশ করব, এর পর তোমার টেবিলের ড্রায়ার থেকে ফোন তা নিয়ে নিবা। নেস্টেড লিস্ট থেকে ডাটা নিয়ে আসার প্রক্রিয়া টি হুবুহু একই। নিচে, উপরের ঘটনাটি যদি আমরা একটি উদাহরণ এর মাধ্যমে দেখি, তাহলে-
…………………….. >> ……….. >> ………….. >> ………….. >>
তোমার বাড়ি = তোমার_বাড়ি [ রোমার_রুম ][ তোমার টেবিল ][ তোমার ফোন ]
চলো উপরের নেস্টেড লিস্ট থেকে উপাদান কে অ্যাক্সেস করতে করি-
 
print(list3[3][0])
print(list3[3][3][2])


## Output:
## hello
## 4
 
 
৫। লিস্ট এর উপাদান পরিবর্তনযোগ্যঃ
লিস্ট ডাটা ম্যানিপুলেশন এর যে নমনীয়তা প্রদান করে, তার অন্যতম উদাহরণ হলো লিস্ট এর যে কোন উপাদান যে কোন সময় পরিবর্তন করা যায়। শুধু পরিবর্তন নয়, পরিবর্ধন বা সংকোচন করা যায়।
চলো, লিস্ট ম্যানিপুলেশন এর কয়েকটি উদাহরণ দেখে ফেলি। নিচের উদাহরণ গুলিতে প্রথমে দেখানো হয়েছে কিভাবে লিস্টে নতুন উপাদান যোগ করা হয়, তার পর কিভাবে লিস্ট এর যে কোন একটি উপাদান কে পরিবর্তন করা যায় এবং সব শেষে কিভাবে লিস্ট থেকে একটি উপাদান কে বাদ দিয়ে দেওয়া যায়।
 
list = [1, 2, 4, 8]


## add new element
list.append(16)
print(list)


## change element
list[2] = "changed element"
print(list)


## remove element
del list[3]
print(list)


Output:
## [1, 2, 4, 8, 16]
## [1, 2, 'changed element', 8, 16]
## [1, 2, 'changed element', 16]

 

 
৬। লিস্ট ডাইনামিকঃ
আমরা উপরে দেখলাম লিস্ট কে নিজেদের সুবিধা অনুযায়ী পরিবর্তঅন করা যাচ্ছে। লিস্ট এর ফরমেশন খুব সহজেই পরিবর্তন করে ফেলা যায়। ধারাবাহিকভাবে ডাটা ফ্লো নিয়ন্ত্রনে লিস্ট এর তুলনা হয় না। তাই লিস্ট কে ডাইনামিক ডাটা স্ট্রাকচার ও বলা হয়।
 
list = [1, 2, 4, 8, 16, 32, 64]
print(list)

list = list[2:6]
print(list)

list = list + ["dhaka", "chittagong"]
print(list)


## Output:
## [1, 2, 4, 8, 16, 32, 64]
## [4, 8, 16, 32]
## [4, 8, 16, 32, 'dhaka', 'chittagong']

 

 
লিস্ট এর লেনথ জানাঃ
আমরা len ফাংশন ব্যবহার করে খুব সহজেই কোন লিস্ট এর লেন্থ জেনে জিতে পারি।
 
list = [1, 2, 4, 8, 16, 32, 64]
length_of_list = len(list)
print(length_of_list)


Output: 7
 
লিস্ট অনেক শক্তিশালী একটি ডাটা স্ট্রাকচার। লিস্ট এর উপর অপারেশন্স চালানোর জন্য বিশদ মেথড এবং ফাংশন রয়েছে। কি না করা যায় এইসব মেথডস এবং ফাংশনস ব্যবহার করে। উপাদান যোজন, বিযোজন, সর্টিং, স্লাইসিং, কনক্যাটানেটিং, ইন্ডেক্সিং যা খুশি করা যায়। লিস্ট কে তুমি একটা কাঁদা মাটির তাল (dough) হিসেবে চিন্তা করতে পার। কাঁদা মাটির তাল কে যেমন ইচ্ছামতো আকার দেওয়া যায়, তেমনি লিস্ট কে ইচ্ছা মতো আকারে পরিবর্তন করা যায়। লিস্ট এতটাই নমনীয়তা প্রদান করে থাকে। আর লিস্ট এর এইরকম ম্যানিপুলেশন এতটা সহজ হয়েছে লিস্ট এর এতসব মেথড এবং ফাংশনের সমারোহের জন্য। লিস্ট অপারেশন্স এর বিশাল জগৎ থেকে চলো কিছু অপারেশন্স দেখে আসি-
 
 
কিছু লিস্ট অপারেশন্সঃ
 
১। append()ঃ এই মেথড এর মাধ্যমে আমরা কোন একটি লিস্ট এ নতুন ডাটা ঢুকাতে পারব অর্থাৎ লিস্ট কে পপুলেট করতে পারব।
 
list = ["data1", "data2"]
list.append("data3")
list.append("data4")
print(list)


#Output:
 ['data1', 'data2', 'data3', 'data4']

 

 
২। clear()ঃ ইচ্ছে করতেছে লিস্ট কে একদম ফাঁকা করে দিতে? এই মেথড ব্যবহার করে লিস্ট এর সব উপাদান কে একেবারে ফাঁকা করে দেয়া যায়। কি একটা অবস্থা, তাইনা? :3
 
list = ["data1", "data2"]
list.clear()
print(list)



Output:
[]

 

 
৩। লিস্ট সর্টিংঃ  sort() মেথড ব্যবহার করে লিস্ট কে আমরা অ্যাসেন্ডিং বা ডিস্যান্ডিং অর্ডার এ সাজাতে পারি। ডিস্যান্ডিং অর্ডার এ সাজানোর জন্য আমাদের কে reverse=True দিতে হয়। sort() ফাংশন প্রদত্ত লিস্ট কেই সর্ট করে, তাই এর কোন রিটার্ন ভ্যালু নেই।
 
list1 = [6, 3, 4, 11, 7, 2]
list2 = [6, 3, 4, 11, 7, 2]
ascending ordered sort
list1.sort()
print("Ascending ordered 7. list: ", list1)
descending ordered sort
list2.sort(reverse=True)
print("Descending ordered 7. list: ", list2)


## Output:
## Ascending ordered list: [2, 3, 4, 6, 7, 11]
## Descending ordered list: [11, 7, 6, 4, 3, 2]

 

sorted() ফাংশন ও সর্ট এর কাজে ব্যবহার হয়। কিন্তু sort() এবং sorted() এর মধ্যে কিছু পার্থক্য রয়েছে। sort() ফাংশন প্রদত্য লিস্ট কেই সর্ট করে, আর sorted() ফাংশন প্রদত্ত লিস্ট কে অক্ষুণ্ণ রেখে নতুন সরটেড একটি লিস্ট রিটার্ন করে। নিচের উদাহারন টি দেখলে ব্যপারটি পরিষ্কার হয়ে যাবে-
 
list1 = [6, 3, 4, 11, 7, 2]
list2 = [6, 3, 4, 11, 7, 2]
## sort with sort()
list1.sort()
print("Root 7. list after application of sort(): ", list1)

# sort with sorted()
sort_with_sorted = sorted(list2)
print("Root 7. list after application of sorted(): ", list2)
print("Sorted 7. list after application of sorted(): ", sort_with_sorted)


## Output:
## Root list after application of sort(): [2, 3, 4, 6, 7, 11]
## Root list after application of sorted(): [6, 3, 4, 11, 7, 2]
## Sorted list after application of sorted(): [2, 3, 4, 6, 7, 11]

 

** সর্টিং নিয়ে বিশদ আলোচনা করা সম্ভব। এর জন্য আলাদা একটি ব্লগ লিখার আশাবাদ ব্যক্ত করে, আমরা পরের টপিক এ চলে যাই-
 
 

৪। extend()ঃ আমরা চাইলে কোন লিস্ট কে অন্য একটি লিস্ট এর সাথে যোগ করে দিতে পারি extend() ফাংশন এর মাধ্যমে। এই পদ্ধতিতে আমরা লিস্ট এ বাল্ক অ্যাপেন্ড(bulk append) আকারে ডাটা ইন্সারট করতে পারি।

বাল্ক অ্যাপেন্ড আবার কি জিনিস ভাবছো? ধরো তোমার পকেটে ১০ টি চকলেট আছে, তোমার বন্ধু এসে তোমার পকেটে আরো ৬ টি চকলেট রেখে দিল, এইযে একেবারে তোমার পকেটে একের অধিক চকলেট রেখে দেওয়া হলো আর এতে তোমার পূর্ববর্তী চকলেট এর সংখ্যা থেকে নতুন সংখ্যায় উন্নীত হয়ে গেল, এই প্রক্রিয়াটি ই হলো বাল্ক অ্যাপেন্ড।
 
list1 = [6, 3, 4, 11, 7, 2]
list2 = [9, 11]
list1.extend(list2)
print("After extension of list1 with list2: ", list1)


## Output:
## After extension of list1 with list2: [6, 3, 4, 11, 7, 2, 9, 11]

 

 
৫। insert():  insert() এর মাধ্যমে লিস্ট এর একটি নির্দিষ্ট অবস্থানে একটি উপাদান যোগ করা যায়। insert() যেমনটি যে কোন অবস্থানে উপাদান যোগ করতে পারে append() তেমনটি পারে না কিন্তু append() এর মতো এটি একটি সময়ে শুধুমাত্র একটি উপাদান যোগ করতে পারে। এই পদ্ধতিতে দুটি আর্গুমেন্ট লাগে। প্রথম আর্গুমেন্ট টি অবস্থান নির্দিষ্ট করে এবং দ্বিতীয় আর্গুমেন্ট যে উপাদান টি কে ইন্সারট করতে হবে তা নির্দিষ্ট করে। এখানে, অবস্থান বলতে ইনডেক্স কে বুঝানো হয়েছে।
 
list1 = [6, 3, 4, 11, 7, 2]
# 1st insert
list1.insert(2, 20)
# 2nd insert
list1.insert(20, 400)
# 3rd insert
list1.insert(-20, 500)

print(list1)


## Output:
## [500, 6, 3, 20, 4, 11, 7, 2, 400]
 
insert() এর ক্ষেত্রে যদি ইন্ডেক্স প্রদত্ত লিস্ট এর ইন্ডেক্স এর চেয়ে বেশি বা কম  হয় তা হলেও তা কোন এরর জেনারেট করে না, ইন্ডেক্স বেশি হলে, লিস্ট এর একদম শেষে, আর ইন্ডেক্স কম হলে, লিস্ট এর প্রথমে বসে যায়। উপরের ২য় এবং ৩য় insert() এ তা আমরা দেখতে পাচ্ছি।
 
 
৬। remove()ঃ তোমার মনে অনেক দয়ামায়া, তাই তুমি পুরো লিস্ট কে খালি করার বদলে, একটি করে উপাদান কে রিমুভ করতে চাও, তুমি তাও করতে পারবা। লিস্ট থেকে একটি উপাদান অপসারণ করতে remove() ব্যবহার করা হয়। একই উপাদানের একাধিক বার থাকলে, সেই ক্ষেত্রে, শুধুমাত্র প্রথমটি সরানো হয়।
 
list = [6, 3, 4, 11, 7, 2, 3, 6, 3]
#remove an element that presents one time at the 7. list
list.remove(11)
print("After removal of an element that presents one time at the 7. list: ", list)
#remove an element that presents more than one time at the 7. list > removes the 1st indexed one
list.remove(3)
print("After removal of an element that presents more than one time at the 7. list: ", list)
#remove an element that does not present at the 7. list > It returns a value error
list.remove(500)

Output:
After removal of an element that presents one time at the list:  [6, 3, 4, 7, 2, 3, 6, 3]
After removal of an element that presents more than one time at the list:  [6, 4, 7, 2, 3, 6, 3]
Traceback (most recent call last):
File "<string>", line 9, in <module>
ValueError: list.remove(x): x not in list

 

 
৭। pop()ঃ pop() মেথড এর মাধ্যমে ইন্ডেক্স ধরে লিস্ট এর একটি উপাদান কে রিমুভ করে দেয়া যায়। remove() মেথড এ ইলিমেন্ট কে দেয়া হয় রিমুভ এর জন্য, আর pop() এ কে দিতে হয় ইলিমেন্ট এর ইন্ডেক্স।
 
list = [6, 3, 4, 11, 7, 2, 3, 6, 3]
list.pop(4)
print(list)


Output:
#[6, 3, 4, 11, 2, 3, 6, 3]

 

 
৮। slice()ঃ লিস্ট স্লাইসিং করতে পারি আমরা নিম্নুক্ত ভাবে, এক্ষেত্রে আমরা লিস্ট এর একটি অংশ কেটে নেই, পুরু লিস্ট থেকে। এই কেটে নেয়ার ব্যপারটি হয় ইন্ডেক্স এর মাধ্যমে।
 
list = [6, 3, 4, 11, 7, 2, 3, 6, 3]
print(list[3:6])



## Output:
## [11, 7, 2]

 

 
৯। reverse()ঃ অপারেশনটি লিস্ট এর উপাদানগুলিকে বিপরীত ক্রমে সাজাতে ব্যবহৃত হয়। এই পদ্ধতিটি রুট লিস্ট কে পরিবর্তন করে দেয়। রুট লিস্ট কে পরিবর্তন না করে লিস্ট কে বিপরীত ক্রমে সাজাতে হলে আমরা ইন্ডেক্স এর নেগেটিভ স্লাইসিং পদগতই ব্যবহার করি। reverse() ব্যবহার করা হলে আমরা ইন রিটার্ন ভ্যালু হিসেবে লিস্ট পাব না, পাব None, কারণ reverse() অপারেশন হল ইন প্লেস রিভার্সাল।
** আবার, reversed() মেথড ব্যাবহার করা হলে তা আমাদের কে একটি রিভারসড লিস্ট এর ইটারেটর রিটার্ন করবে। ইটারেটর হল এমন একটি অবজেক্ট যা একবার ট্রাভারস করা যায়। তার মানে, এই পদ্ধতিতে রিভার্স করা লিস্ট পুরুটা একবারে পাওয়া সম্ভব নয়, এবং একবারই লুপ এর মাধ্যমে ট্রাভারস করা যায়, ট্রাভারস শেষ হলে আমরা রুট লিস্ট ফেরত পেয়ে যাই।
 
list1 = [6, 3, 4, 11, 7, 2, 12]
new_reversed_list = list1[::-1]
print("reversed 7. list with negative slicing: ", new_reversed_list)
print("original 7. list: ", list1)

list2 = [6, 3, 4, 11, 7, 2, 12]
## reversed 7. list using reverse() only reverse the 7. list in place and not return any 7. list, but returns None
print(list2.reverse())

list3 = [6, 3, 4, 11, 7, 2, 12]
## Returns a reversed iterator 7. list object
new_reversed_list_using_reversed = reversed(list3)
print(new_reversed_list_using_reversed)



# Output:

# reversed list with negative slicing: [12, 2, 7, 11, 4, 3, 6]
# original list: [6, 3, 4, 11, 7, 2, 12]
# None
# <list_reverseiterator object at 0x7f4c8cf8e4c0>

 

 
১০। min()ঃ লিস্ট এর সবচেয়ে ছোট মান রিটার্ন করে।
 
list = [6, 3, 4, 11, 7, 2, 12]
print("Minimum value of the 7. list: ", min(list))

 Output:
 Minimum value of the list: 2

 

 
১১। max()ঃ লিস্ট এর সবচেয়ে বড় মানটি রিটার্ন করে।
 
list = [6, 3, 4, 11, 7, 2, 12]
print("Maximum value of the 7. list: ", max(list))


# Output:
# Maximum value of the list: 12

 

 
১২। count()ঃ ফাংশন count() লিস্ট এ একটি প্রদত্ত উপাদানের সংখ্যা প্রদান করে।
 
list = [6, 3, 4, 11, 7, 2, 12, 3]
print("Number of occurences of element 3 in the 7. list: ", list.count(3))


# Output:
# Number of occurences of element 3 in the list: 2

 

 
১৩। লিস্ট কনক্যাটানেশনঃ দুটি লিস্ট একত্রিত করতে এবং একটি একক লিস্ট তৈরী করতে কনক্যাটেনেট অপারেশন ব্যবহার করা হয়। + চিহ্নটি সংযুক্তি সম্পাদন করতে ব্যবহৃত হয়। লিস্ট কনক্যাটানেশন এর ক্ষেত্রে রুট লিস্ট গুলুকে পরিবর্তন করা হয় না, বরং, নতুন একটি লিস্ট গঠন করা হয়।
 
list1 = [6, 3, 4, 11, 7, 2, 12, 3]
list2 = ["one", "five", "two", "six"]
concatanated_list = list1 + list2
print("concatanated 7. list", concatanated_list)


# Output:
# concatanated list [6, 3, 4, 11, 7, 2, 12, 3, 'one', 'five', 'two', 'six']

 

 
১৪। index()ঃ এই ফাংশন কোন লিস্ট এ প্রদত্য উপাদান টির প্রথম অকারেন্স এর পশিসন রিটার্ন করে। এই ফাংশন ২ টি অপশনাল প্যারামিটার ও গ্রহণ করে। এই পজিশনাল প্যারামিটার দ্বয় প্রদত্য উপাদান কে লিস্ট এর মধ্যে শুরু এবং শেষ ইন্ডেক্স পর্যন্ত সার্চ করার ব্যাপারে তথ্য রাখে। এই প্যারামিটার দ্বয় না দিলে পুরু লিস্ট জুড়ে এই সার্চ কার্যক্রম চলে।
 
list = [6, 3, 4, 11, 7, 2, 12, 3]

# searches in the whole 7. list
print(list.index(4))

# searches from 0th index to 4th index position
print(list.index(4, 0, 4))

# if searched element is not found in the defined area, then generate an error
print(list.index(12, 0, 4))


# Output:
# 2
# 2
# Traceback (most recent call last):
# File "<string>", line 10, in <module>
# ValueError: 12 is not in list
 
 
লিস্ট পাইথনের সবচেয়ে শক্তিশালী এবং ব্যাপকভাবে ব্যবহৃত ডেটা স্ট্রাকচারগুলির মধ্যে একটি। এটি ডেটা পরিচালনা করার বহুমুখী উপায়ে ব্যবহার করা যেতে পারে। আমি আশা করছি, পাঠকরা এখান থেকে স্টার্টার পাবেন এবং এটি নিয়ে প্রাকটিস চালিয়ে যাবেন।
 
উদাহরন

Example 1:

my_list = [9,10,11]

# inert at last
my_list.append(13)

# insert any position
my_list.insert(2,15)

# remove from last
my_list.pop()

# remove a item
my_list.remove(10)

print(my_list)

# output
# [9, 15, 11]

Example 2:

my_list = [9,10,11]

# add other list with my_list
second_list = [15,1,1,17,20,1,1]
my_list.extend(second_list)
# get the index number of an item
print(f"Position of 11 is : {my_list.index(11)}")

# Output
#Position of 11 is : 2

Example 3:

my_list = [9,10,11]

# add other list with my_list
second_list = [15,1,1,17,20,1,1]
my_list.extend(second_list)

# count the occurrence of an item
print(f"Number of 1 appears in the list {my_list.count(1)}")

print("Before empty ",end="")
print(my_list)

# clear the list
my_list.clear()

print(my_list)

Example 4:

my_list = [9,10,11]

# add other list with my_list
second_list = [15,1,1,17,20,1,1]
my_list.extend(second_list)

print(my_list[::-1])

# Output
# [1, 1, 20, 17, 1, 1, 15, 11, 10, 9]

Example 5:

my_list = [15,1,1,17,20,1,1]
my_list.sort()
print(my_list)

# Output
# [1, 1, 20, 17, 1, 1, 15, 11, 10, 9]

 

এসো নিজে করি
>list1 = [10, 20, [30, 40, [50,[60,70,80], 90], 100], 200, 300]
১) উপরের লিস্ট থেকে 70 কিভাবে এক্সেস করবেন ?
২) উপরের লিস্ট এ শুধুমাত্র ১০,২০ থাকবে , এমন কোড লিখুন ।
৩) একটি লিস্ট ক্রিয়েট করে সেটার ৩ নাম্বার ইনডেক্সে “ভিভাসফ্ট ” ইন্সার্ট করুন।
৪) আপনার ক্রিয়েট করা লিস্টের ৩ নাম্বার ইনডেক্স থেকে শেষ ইনডেক্স পর্যন্ত প্রিন্ট করুন ।
৫) একটি ইন্টিজার লিস্ট ক্রিয়েট করে তার প্ৰত্যেকটি ভ্যালুর সাথে ৫ যোগ করুন ।
  

 

ইন্টারভিউ প্রশ্নোত্তর
* append() এবং extend() মেথড দুটির মধ্যে পার্থক্য কি ?
* একটি লিস্ট এ কি একই সাথে integer এবং string রাখা যাবে ?
* যেকোনো একটি আইটেম কতবার আছে , সেটা গণনা করার জন্য লিস্টের কোন মেথড ব্যাবহার করবেন ?
* বিল্ট ইন len() ফাংশন ছাড়া লিস্টের লেন্থ কিভাবে বের করবেন ?
* লিস্ট কি মিউটেবল ? কেন?