উত্তর:
একটি list
শৃঙ্খলা রক্ষা করে dict
এবং set
না: আপনি যখন অর্ডারের বিষয়ে চিন্তা করেন, তাই আপনাকে অবশ্যই ব্যবহার করতে হবে list
(যদি আপনার ধারকগুলির পছন্দটি এই তিনটি পর্যন্ত সীমাবদ্ধ থাকে তবে অবশ্যই ;-)।
dict
প্রতিটি কীটির সাথে একটি মানকে যুক্ত করে, যখন list
এবং set
কেবল মানগুলি থাকে: স্পষ্টতই বিভিন্ন ব্যবহারের ক্ষেত্রে।
set
আইটেমগুলি হ্যাশেবল হওয়ার দরকার, list
এটি নয়: আপনার যদি অ-হাস্যযোগ্য আইটেম থাকে তবে আপনি ব্যবহার করতে পারবেন না set
এবং তার পরিবর্তে অবশ্যই ব্যবহার করতে হবে list
।
set
সদৃশ নিষিদ্ধ, list
না: একটি গুরুত্বপূর্ণ পার্থক্য। (একটি "মাল্টিসেট", যা একাধিকবার উপস্থিত আইটেমগুলির জন্য আলাদা গণনায় নকল করে, এটি পাওয়া যায় collections.Counter
- dict
কোনও অদ্ভুত কারণে আপনি আমদানি করতে না পারলে collections
, বা প্রাক-২.7 এ আপনি একটি হিসাবে তৈরি করতে পারেন) পাইথনকে একটি collections.defaultdict(int)
হিসাবে, কী হিসাবে আইটেম এবং গণনা হিসাবে সম্পর্কিত মান ব্যবহার করে)।
একটি set
(বা dict
, কীগুলির জন্য) একটি মানের সদস্যতার জন্য চেক করা তীব্রভাবে দ্রুত (একটি ধ্রুবক, স্বল্প সময় গ্রহণ), যখন একটি তালিকায় এটি গড় এবং সবচেয়ে খারাপ ক্ষেত্রে তালিকার দৈর্ঘ্যের সমানুপাতিক সময় নেয় takes সুতরাং, যদি আপনার হাতে ধাবনযোগ্য আইটেম থাকে তবে অর্ডার বা নকল সম্পর্কে কোনওভাবেই যত্ন নেই এবং দ্রুত সদস্যতা যাচাই করতে চান, এর set
চেয়ে ভাল list
।
আপনি যখন অনন্য উপাদানের একটি আনর্ডারড সংগ্রহ চান, তখন একটি ব্যবহার করুন set
। (উদাহরণস্বরূপ, আপনি যখন কোনও নথিতে ব্যবহৃত সমস্ত শব্দের সংকলন চান)।
আপনি যখন অপরিবর্তনীয় অর্ডার করা উপাদানগুলির তালিকা সংগ্রহ করতে চান, তখন একটি ব্যবহার করুন tuple
। (উদাহরণস্বরূপ, আপনি যখন একটি (নাম, ফোন_ সংখ্যা) জুটি চান যা আপনি কোনও সেটের উপাদান হিসাবে ব্যবহার করতে চান, তখন আপনাকে তালিকার চেয়ে একটি টিউপলের প্রয়োজন হবে কারণ সেটের জন্য উপাদানগুলি অপরিবর্তনীয় হতে পারে)।
আপনি যখন পরিবর্তিত উপাদানের তালিকার পরিবর্তিত তালিকা সংগ্রহ করতে চান, তখন একটি ব্যবহার করুন list
। (উদাহরণস্বরূপ, আপনি যখন একটি তালিকায় নতুন ফোন নম্বর যুক্ত করতে চান: [সংখ্যা 1, নম্বর 2, ...])।
আপনি কীগুলি থেকে মানগুলিতে ম্যাপিং করতে চাইলে একটি ব্যবহার করুন dict
। (উদাহরণস্বরূপ, আপনি যখন একটি টেলিফোন বই চান যা ফোন নম্বরগুলিতে নামগুলি ম্যাপ করে {'John Smith' : '555-1212'}
:)। একটি ডিকের কীগুলি আনর্ডার্ড করা আছে তা নোট করুন। (আপনি যদি ডিক (টেলিফোন বই) এর মাধ্যমে পুনরাবৃত্তি করেন, কীগুলি (নামগুলি যে কোনও ক্রমে প্রদর্শিত হতে পারে)।
সংক্ষেপে, ব্যবহার করুন:
list
- আপনার যদি আইটেমগুলির ক্রমযুক্ত ক্রম দরকার হয়।
dict
- যদি আপনার কীগুলির সাথে মানগুলি সম্পর্কিত করতে হয়
set
- যদি আপনার অনন্য উপাদান রাখতে হয়।
একটি তালিকা একটি পরিবর্তনীয় ক্রম, সাধারণত একজাতীয় আইটেমের সংগ্রহ সঞ্চয় করতে ব্যবহৃত হয়।
একটি তালিকা সমস্ত সাধারণ ক্রম ক্রিয়াকলাপ প্রয়োগ করে:
x in l
এবং x not in l
l[i]
, l[i:j]
,l[i:j:k]
len(l)
, min(l)
,max(l)
l.count(x)
l.index(x[, i[, j]])
- 1 ম ঘটনার সূচক x
মধ্যে l
(বা পরে i
আগে j
indeces)একটি তালিকা মিউটেবল সিকোয়েন্স ক্রিয়াকলাপগুলিও কার্যকর করে:
l[i] = x
- আইটেমটি i
এর l
দ্বারা প্রতিস্থাপিত হয়x
l[i:j] = t
- ফালি l
থেকে i
থেকে j
iterable বিষয়বস্তু দ্বারা প্রতিস্থাপিত হয়t
del l[i:j]
- একই রকম l[i:j] = []
l[i:j:k] = t
- এর উপাদানগুলির l[i:j:k]
দ্বারা প্রতিস্থাপিত হয়t
del l[i:j:k]
- s[i:j:k]
তালিকা থেকে উপাদানগুলি সরানl.append(x)
- x
অনুক্রমের শেষে সংযোজনl.clear()
- থেকে সমস্ত আইটেম সরান l
(ডেল হিসাবে একই l[:]
)l.copy()
- এর অগভীর অনুলিপি তৈরি করে l
(একই l[:]
)l.extend(t)
বা l += t
- l
এর বিষয়বস্তু সহ প্রসারিতt
l *= n
- l
বার n
বার বার এর বিষয়বস্তুগুলির সাথে আপডেটl.insert(i, x)
- প্রদত্ত সূচকটিতে সন্নিবেশ x
করানl
i
l.pop([i])
- আইটেমটি পুনরুদ্ধার করে i
এবং এটি থেকে সরিয়ে দেয়l
l.remove(x)
- l
যেখানে l[i]
x এর সমান প্রথম আইটেমটি সরিয়ে ফেলুনl.reverse()
- l
জায়গায় আইটেম বিপরীতএকটি তালিকা পদ্ধতির সুবিধা গ্রহণ করে স্ট্যাক হিসাবে ব্যবহার করা যেতে পারে append
এবং pop
।
একটি অভিধান স্বেচ্ছাসেবী বস্তুগুলিতে হ্যাশযোগ্য মানকে মানচিত্র করে। একটি অভিধান একটি পরিবর্তনীয় অবজেক্ট। অভিধানের প্রধান ক্রিয়াকলাপগুলি কিছু কী দিয়ে একটি মান সংরক্ষণ করে এবং কীটি দিয়ে দেওয়া মানটি বের করে নিচ্ছে।
অভিধানে, আপনি কীগুলি মান হিসাবে ব্যবহার করতে পারবেন না যা হ্যাশযোগ্য নয়, যা তালিকাগুলি, অভিধান বা অন্যান্য পরিবর্তনীয় প্রকারের মান রয়েছে।
একটি সেট স্বতন্ত্র হ্যাশেবল অবজেক্টগুলির একটি আনর্ডার্ড সংগ্রহ। একটি সেট সাধারণত সদস্যতা পরীক্ষা অন্তর্ভুক্ত করার জন্য ব্যবহৃত হয়, একটি অনুক্রম থেকে সদৃশ অপসারণ, এবং ছেদ, ইউনিয়ন, পার্থক্য, এবং প্রতিসম পার্থক্য হিসাবে গাণিতিক অপারেশন কম্পিউটিং।
যদিও এটি এসকে কভার করে না set
, এটি dict
এস এবং এসগুলির একটি ভাল ব্যাখ্যা list
:
তালিকাগুলি যা তাদের মনে হয় - মানগুলির একটি তালিকা। এগুলির প্রত্যেকটির শূন্য থেকে শুরু করে প্রথম নম্বর দেওয়া হয় - প্রথমটি শূন্য থেকে দ্বিতীয়, দ্বিতীয় 1, তৃতীয় 2 ইত্যাদি You আপনি তালিকা থেকে মানগুলি সরিয়ে, এবং শেষ পর্যন্ত নতুন মান যুক্ত করতে পারেন। উদাহরণ: আপনার অনেক বিড়ালের নাম।
শব্দকোষগুলি তাদের নামের মতো একই রকম - একটি অভিধান - একটি অভিধানে আপনার শব্দের একটি 'সূচক' রয়েছে এবং তাদের প্রত্যেকের জন্য একটি সংজ্ঞা রয়েছে। পাইথনে শব্দটিকে 'কী' এবং সংজ্ঞাটিকে একটি 'মান' বলা হয়। একটি অভিধানের মানগুলি সংখ্যাযুক্ত নয় - তার নামের মতো যা বোঝায় - ডিকোশনারি are একটি অভিধানে আপনার শব্দের একটি 'সূচক' রয়েছে এবং তাদের প্রত্যেকের জন্য একটি সংজ্ঞা রয়েছে। একটি অভিধানের মানগুলি সংখ্যাযুক্ত নয় - সেগুলি কোনও নির্দিষ্ট ক্রমে নয়, হয় - কী একই কাজ করে। আপনি অভিধানগুলিতে মানগুলি যুক্ত করতে, অপসারণ করতে এবং সংশোধন করতে পারেন। উদাহরণ: টেলিফোন বই।
সি ++ এর জন্য আমার সর্বদা এই ফ্লো চার্টটি মনে রাখা ছিল: আমি কোন দৃশ্যে একটি বিশেষ এসটিএল ধারক ব্যবহার করব? , তাই পাইথন 3-তেও অনুরূপ কিছু পাওয়া গেলে আমি কৌতূহল ছিলাম, তবে আমার ভাগ্য ছিল না।
পাইথনের জন্য আপনার যা মনে রাখা দরকার তা হ'ল: সি ++ এর মতো কোনও পাইথন স্ট্যান্ডার্ড নেই। সুতরাং বিভিন্ন পাইথন দোভাষী (যেমন সিপিথন, পাইপাই) এর জন্য বিশাল পার্থক্য থাকতে পারে। নিম্নলিখিত ফ্লো চার্ট সিপিথনের জন্য।
উপরন্তু আমি কোন ভালো উপায় ডায়াগ্রাম নিম্নলিখিত ডাটা স্ট্রাকচার নিগমবদ্ধ পাওয়া যায়নি: bytes
, byte arrays
, tuples
, named_tuples
, ChainMap
, Counter
, এবং arrays
।
OrderedDict
এবং মডিউল deque
মাধ্যমে উপলব্ধ collections
।heapq
heapq
মডিউল থেকে উপলব্ধLifoQueue
, Queue
এবং মডিউলের PriorityQueue
মাধ্যমে উপলভ্য queue
যা একত্রে (থ্রেড) অ্যাক্সেসের জন্য ডিজাইন করা হয়েছে। (একটি multiprocessing.Queue
উপলভ্য আছে তবে আমি এর মধ্যে পার্থক্যগুলি জানি না queue.Queue
তবে অনুমান করব যে প্রক্রিয়াগুলি থেকে একযোগে অ্যাক্সেসের প্রয়োজন হলে এটি ব্যবহার করা উচিত))dict
, set
, frozen_set
, এবং list
অবশ্যই builtin হয়আপনি যদি এই উত্তরটির উন্নতি করতে এবং প্রতিটি দিক থেকে আরও ভাল চিত্র সরবরাহ করতে পারেন তবে কারও পক্ষে আমি কৃতজ্ঞ। নির্দ্বিধায় এবং স্বাগত বোধ।
পিএস: ডায়াগ্রামটি ইয়েড দিয়ে তৈরি করা হয়েছে। গ্রাফিকাল ফাইলটি এখানে
তালিকাগুলি , ডিক্টস এবং সেটগুলির সাথে মিলিয়ে আরও একটি আকর্ষণীয় পাইথন অবজেক্ট রয়েছে অর্ডারডিক্টস ।
অর্ডার করা অভিধানগুলিও নিয়মিত অভিধানের মতো তবে তারা আইটেমগুলি wereোকানো ছিল তা ক্রম মনে করে। অর্ডার করা অভিধানে পুনরাবৃত্তি করার সময়, আইটেমগুলি তাদের কীগুলি প্রথমে যুক্ত করার ক্রমে ফিরে আসে।
অর্ডারডিক্টসগুলি কার্যকর হতে পারে যখন আপনার কীগুলির ক্রম সংরক্ষণ করার প্রয়োজন হয়, উদাহরণস্বরূপ নথির সাথে কাজ করা: ডকুমেন্টের সমস্ত শর্তের ভেক্টর প্রতিনিধিত্ব করা প্রয়োজন common সুতরাং অর্ডারডিক্টস ব্যবহার করে আপনি দক্ষতার সাথে যাচাই করতে পারবেন যদি কোনও শব্দটি আগে পড়া হয়েছে, শর্তাদি যুক্ত করুন, শর্তাবলী বের করুন এবং সমস্ত ম্যানিপুলেশনগুলির পরে আপনি তাদের অর্ডারযুক্ত ভেক্টর উপস্থাপনাটি নিষ্কাশন করতে পারেন।
তালিকাগুলি যা তাদের মনে হয় - মানগুলির একটি তালিকা। এগুলির প্রত্যেকটির শূন্য থেকে শুরু করে প্রথম নম্বর দেওয়া হয় - প্রথমটি শূন্য থেকে দ্বিতীয়, দ্বিতীয় 1, তৃতীয় 2 ইত্যাদি You আপনি তালিকা থেকে মানগুলি সরিয়ে, এবং শেষ পর্যন্ত নতুন মান যুক্ত করতে পারেন। উদাহরণ: আপনার অনেক বিড়ালের নাম।
টিপলগুলি কেবল তালিকার মতো তবে আপনি তাদের মান পরিবর্তন করতে পারবেন না। আপনি যে মানগুলি প্রথমে তুলে ধরেন, সেগুলি হ'ল মানগুলি যা আপনি প্রোগ্রামের বাকী অংশে আটকে আছেন। আবার সহজ রেফারেন্সের জন্য প্রতিটি মান শূন্য থেকে শুরু করে নম্বরযুক্ত। উদাহরণ: বছরের মাসের নাম।
অভিধানের কি তাদের নাম প্রস্তাব দেওয়া একই রকম - একটি অভিধান। একটি অভিধানে আপনার শব্দের একটি 'সূচক' রয়েছে এবং তাদের প্রত্যেকের জন্য একটি সংজ্ঞা রয়েছে। পাইথনে শব্দটিকে 'কী' এবং সংজ্ঞাটিকে একটি 'মান' বলা হয়। একটি অভিধানের মানগুলি সংখ্যাযুক্ত নয় - তার নামের মতো যা বোঝায় - ডিকোশনারি are একটি অভিধানে আপনার শব্দের একটি 'সূচক' রয়েছে এবং তাদের প্রত্যেকের জন্য একটি সংজ্ঞা রয়েছে। পাইথনে শব্দটিকে 'কী' এবং সংজ্ঞাটিকে একটি 'মান' বলা হয়। একটি অভিধানের মানগুলি সংখ্যাযুক্ত নয় - সেগুলি কোনও নির্দিষ্ট ক্রমে নয়, হয় - কী একই কাজ করে। আপনি অভিধানগুলিতে মানগুলি যুক্ত করতে, অপসারণ করতে এবং সংশোধন করতে পারেন। উদাহরণ: টেলিফোন বই।
এগুলি ব্যবহার করার সময়, আমি আপনার রেফারেন্সের জন্য তাদের পদ্ধতিগুলির একটি বিস্তৃত চিটপত্র তৈরি করি:
class ContainerMethods:
def __init__(self):
self.list_methods_11 = {
'Add':{'append','extend','insert'},
'Subtract':{'pop','remove'},
'Sort':{'reverse', 'sort'},
'Search':{'count', 'index'},
'Entire':{'clear','copy'},
}
self.tuple_methods_2 = {'Search':'count','index'}
self.dict_methods_11 = {
'Views':{'keys', 'values', 'items'},
'Add':{'update'},
'Subtract':{'pop', 'popitem',},
'Extract':{'get','setdefault',},
'Entire':{ 'clear', 'copy','fromkeys'},
}
self.set_methods_17 ={
'Add':{['add', 'update'],['difference_update','symmetric_difference_update','intersection_update']},
'Subtract':{'pop', 'remove','discard'},
'Relation':{'isdisjoint', 'issubset', 'issuperset'},
'operation':{'union' 'intersection','difference', 'symmetric_difference'}
'Entire':{'clear', 'copy'}}
অভিধান: একটি পাইথন ডিকশনারি হ্যাশ টেবিলের মতো ব্যবহার করা হয় যা কী হিসাবে সূচক হিসাবে কী এবং মান হিসাবে বস্তু হয়।
তালিকা: অ্যারেতে অবজেক্টের অবস্থান অনুসারে সূচিকৃত অ্যারেতে অবজেক্টগুলি ধরে রাখার জন্য একটি তালিকা ব্যবহৃত হয়।
সেট: একটি সেট এমন একটি ফাংশন সহ একটি সংগ্রহ যা জানাতে পারে যে কোনও বস্তু সেটে উপস্থিত রয়েছে বা উপস্থিত নেই।