পাইথনে, কখন অভিধান, তালিকা বা সেট ব্যবহার করবেন?


294

আমার কখন অভিধান, তালিকা বা সেট ব্যবহার করা উচিত?

এমন কি এমন পরিস্থিতি রয়েছে যা প্রতিটি ডেটা টাইপের জন্য বেশি উপযুক্ত?

উত্তর:


603

একটি 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


6
দ্রষ্টব্য যে পাইথন ৩.7 ডিফল্টরূপে আদেশ দিয়েছেন
জিগি বাইতে ২

172
  • আপনার কি কেবল আইটেমগুলির ক্রমযুক্ত ক্রম দরকার? একটি তালিকার জন্য যান।
  • আপনি ইতিমধ্যে একটি নির্দিষ্ট মান পেয়েছেন কিনা তা কেবল জানতে হবে তবে অর্ডার না করে (এবং আপনার ডুপ্লিকেট সংরক্ষণ করার দরকার নেই)? একটি সেট ব্যবহার করুন।
  • কীগুলির কীগুলির সাথে আপনার মানগুলি যুক্ত করতে হবে, যাতে আপনি পরে এগুলি দক্ষতার সাথে (কী দ্বারা) সন্ধান করতে পারেন? অভিধান ব্যবহার করো.

30
এটি অ্যালেক্স এম :-) দ্বারা উপরের উত্তরের "টিএল; ডিআর" অংশ হওয়া উচিত
অ্যালেক্স বোশম্যানস

9
আমার মনে হয় এটি অন্য পথে .. অ্যালেক্সের জোনকে তার ভোট দান করা উচিত। এই উত্তরটি অনেক কিছু কভার করে এবং এটি আরও সংক্ষিপ্ত এবং স্পষ্ট।
মেহমেট

তবে, আপনি যদি এই ডেটা টাইপের মধ্যে সময়ের জটিলতার পার্থক্যটি জানতে চান অ্যালেক্সের ব্যাখ্যাটি আরও ভাল কাজ করে
kcEmenike

19

আপনি যখন অনন্য উপাদানের একটি আনর্ডারড সংগ্রহ চান, তখন একটি ব্যবহার করুন set। (উদাহরণস্বরূপ, আপনি যখন কোনও নথিতে ব্যবহৃত সমস্ত শব্দের সংকলন চান)।

আপনি যখন অপরিবর্তনীয় অর্ডার করা উপাদানগুলির তালিকা সংগ্রহ করতে চান, তখন একটি ব্যবহার করুন tuple। (উদাহরণস্বরূপ, আপনি যখন একটি (নাম, ফোন_ সংখ্যা) জুটি চান যা আপনি কোনও সেটের উপাদান হিসাবে ব্যবহার করতে চান, তখন আপনাকে তালিকার চেয়ে একটি টিউপলের প্রয়োজন হবে কারণ সেটের জন্য উপাদানগুলি অপরিবর্তনীয় হতে পারে)।

আপনি যখন পরিবর্তিত উপাদানের তালিকার পরিবর্তিত তালিকা সংগ্রহ করতে চান, তখন একটি ব্যবহার করুন list। (উদাহরণস্বরূপ, আপনি যখন একটি তালিকায় নতুন ফোন নম্বর যুক্ত করতে চান: [সংখ্যা 1, নম্বর 2, ...])।

আপনি কীগুলি থেকে মানগুলিতে ম্যাপিং করতে চাইলে একটি ব্যবহার করুন dict। (উদাহরণস্বরূপ, আপনি যখন একটি টেলিফোন বই চান যা ফোন নম্বরগুলিতে নামগুলি ম্যাপ করে {'John Smith' : '555-1212'}:)। একটি ডিকের কীগুলি আনর্ডার্ড করা আছে তা নোট করুন। (আপনি যদি ডিক (টেলিফোন বই) এর মাধ্যমে পুনরাবৃত্তি করেন, কীগুলি (নামগুলি যে কোনও ক্রমে প্রদর্শিত হতে পারে)।


ওহ, তিনি টিপলস সম্পর্কে জিজ্ঞাসা করেন নি।
হাবনবিত

18
  • যখন আপনার কাছে মানচিত্রের মানচিত্রের মানচিত্রের সেট থাকে তখন একটি অভিধান ব্যবহার করুন।

  • আপনার কাছে অর্ডার করা আইটেমগুলির সংগ্রহ থাকলে একটি তালিকা ব্যবহার করুন।

  • একটি আনর্ডারড সেট আইটেমের সঞ্চয় করতে একটি সেট ব্যবহার করুন।


6

সংক্ষেপে, ব্যবহার করুন:

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আগে jindeces)

একটি তালিকা মিউটেবল সিকোয়েন্স ক্রিয়াকলাপগুলিও কার্যকর করে:

  • l[i] = x- আইটেমটি iএর lদ্বারা প্রতিস্থাপিত হয়x
  • l[i:j] = t- ফালি lথেকে iথেকে jiterable বিষয়বস্তু দ্বারা প্রতিস্থাপিত হয়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করানli
  • l.pop([i])- আইটেমটি পুনরুদ্ধার করে iএবং এটি থেকে সরিয়ে দেয়l
  • l.remove(x)- lযেখানে l[i]x এর সমান প্রথম আইটেমটি সরিয়ে ফেলুন
  • l.reverse()- lজায়গায় আইটেম বিপরীত

একটি তালিকা পদ্ধতির সুবিধা গ্রহণ করে স্ট্যাক হিসাবে ব্যবহার করা যেতে পারে appendএবং pop

অভিধান

একটি অভিধান স্বেচ্ছাসেবী বস্তুগুলিতে হ্যাশযোগ্য মানকে মানচিত্র করে। একটি অভিধান একটি পরিবর্তনীয় অবজেক্ট। অভিধানের প্রধান ক্রিয়াকলাপগুলি কিছু কী দিয়ে একটি মান সংরক্ষণ করে এবং কীটি দিয়ে দেওয়া মানটি বের করে নিচ্ছে।

অভিধানে, আপনি কীগুলি মান হিসাবে ব্যবহার করতে পারবেন না যা হ্যাশযোগ্য নয়, যা তালিকাগুলি, অভিধান বা অন্যান্য পরিবর্তনীয় প্রকারের মান রয়েছে।

সেট

একটি সেট স্বতন্ত্র হ্যাশেবল অবজেক্টগুলির একটি আনর্ডার্ড সংগ্রহ। একটি সেট সাধারণত সদস্যতা পরীক্ষা অন্তর্ভুক্ত করার জন্য ব্যবহৃত হয়, একটি অনুক্রম থেকে সদৃশ অপসারণ, এবং ছেদ, ইউনিয়ন, পার্থক্য, এবং প্রতিসম পার্থক্য হিসাবে গাণিতিক অপারেশন কম্পিউটিং।


5

যদিও এটি এসকে কভার করে না set, এটি dictএস এবং এসগুলির একটি ভাল ব্যাখ্যা list:

তালিকাগুলি যা তাদের মনে হয় - মানগুলির একটি তালিকা। এগুলির প্রত্যেকটির শূন্য থেকে শুরু করে প্রথম নম্বর দেওয়া হয় - প্রথমটি শূন্য থেকে দ্বিতীয়, দ্বিতীয় 1, তৃতীয় 2 ইত্যাদি You আপনি তালিকা থেকে মানগুলি সরিয়ে, এবং শেষ পর্যন্ত নতুন মান যুক্ত করতে পারেন। উদাহরণ: আপনার অনেক বিড়ালের নাম।

শব্দকোষগুলি তাদের নামের মতো একই রকম - একটি অভিধান - একটি অভিধানে আপনার শব্দের একটি 'সূচক' রয়েছে এবং তাদের প্রত্যেকের জন্য একটি সংজ্ঞা রয়েছে। পাইথনে শব্দটিকে 'কী' এবং সংজ্ঞাটিকে একটি 'মান' বলা হয়। একটি অভিধানের মানগুলি সংখ্যাযুক্ত নয় - তার নামের মতো যা বোঝায় - ডিকোশনারি are একটি অভিধানে আপনার শব্দের একটি 'সূচক' রয়েছে এবং তাদের প্রত্যেকের জন্য একটি সংজ্ঞা রয়েছে। একটি অভিধানের মানগুলি সংখ্যাযুক্ত নয় - সেগুলি কোনও নির্দিষ্ট ক্রমে নয়, হয় - কী একই কাজ করে। আপনি অভিধানগুলিতে মানগুলি যুক্ত করতে, অপসারণ করতে এবং সংশোধন করতে পারেন। উদাহরণ: টেলিফোন বই।

http://www.sthurlow.com/python/lesson06/


4

সি ++ এর জন্য আমার সর্বদা এই ফ্লো চার্টটি মনে রাখা ছিল: আমি কোন দৃশ্যে একটি বিশেষ এসটিএল ধারক ব্যবহার করব? , তাই পাইথন 3-তেও অনুরূপ কিছু পাওয়া গেলে আমি কৌতূহল ছিলাম, তবে আমার ভাগ্য ছিল না।

পাইথনের জন্য আপনার যা মনে রাখা দরকার তা হ'ল: সি ++ এর মতো কোনও পাইথন স্ট্যান্ডার্ড নেই। সুতরাং বিভিন্ন পাইথন দোভাষী (যেমন সিপিথন, পাইপাই) এর জন্য বিশাল পার্থক্য থাকতে পারে। নিম্নলিখিত ফ্লো চার্ট সিপিথনের জন্য।

উপরন্তু আমি কোন ভালো উপায় ডায়াগ্রাম নিম্নলিখিত ডাটা স্ট্রাকচার নিগমবদ্ধ পাওয়া যায়নি: bytes, byte arrays, tuples, named_tuples, ChainMap, Counter, এবং arrays

  • OrderedDictএবং মডিউল dequeমাধ্যমে উপলব্ধ collections
  • heapqheapqমডিউল থেকে উপলব্ধ
  • LifoQueue, Queueএবং মডিউলের PriorityQueueমাধ্যমে উপলভ্য queueযা একত্রে (থ্রেড) অ্যাক্সেসের জন্য ডিজাইন করা হয়েছে। (একটি multiprocessing.Queueউপলভ্য আছে তবে আমি এর মধ্যে পার্থক্যগুলি জানি না queue.Queueতবে অনুমান করব যে প্রক্রিয়াগুলি থেকে একযোগে অ্যাক্সেসের প্রয়োজন হলে এটি ব্যবহার করা উচিত))
  • dict, set, frozen_set, এবং listঅবশ্যই builtin হয়

আপনি যদি এই উত্তরটির উন্নতি করতে এবং প্রতিটি দিক থেকে আরও ভাল চিত্র সরবরাহ করতে পারেন তবে কারও পক্ষে আমি কৃতজ্ঞ। নির্দ্বিধায় এবং স্বাগত বোধ। ফ্লোচার্ট

পিএস: ডায়াগ্রামটি ইয়েড দিয়ে তৈরি করা হয়েছে। গ্রাফিকাল ফাইলটি এখানে


3

তালিকাগুলি , ডিক্টস এবং সেটগুলির সাথে মিলিয়ে আরও একটি আকর্ষণীয় পাইথন অবজেক্ট রয়েছে অর্ডারডিক্টস

অর্ডার করা অভিধানগুলিও নিয়মিত অভিধানের মতো তবে তারা আইটেমগুলি wereোকানো ছিল তা ক্রম মনে করে। অর্ডার করা অভিধানে পুনরাবৃত্তি করার সময়, আইটেমগুলি তাদের কীগুলি প্রথমে যুক্ত করার ক্রমে ফিরে আসে।

অর্ডারডিক্টসগুলি কার্যকর হতে পারে যখন আপনার কীগুলির ক্রম সংরক্ষণ করার প্রয়োজন হয়, উদাহরণস্বরূপ নথির সাথে কাজ করা: ডকুমেন্টের সমস্ত শর্তের ভেক্টর প্রতিনিধিত্ব করা প্রয়োজন common সুতরাং অর্ডারডিক্টস ব্যবহার করে আপনি দক্ষতার সাথে যাচাই করতে পারবেন যদি কোনও শব্দটি আগে পড়া হয়েছে, শর্তাদি যুক্ত করুন, শর্তাবলী বের করুন এবং সমস্ত ম্যানিপুলেশনগুলির পরে আপনি তাদের অর্ডারযুক্ত ভেক্টর উপস্থাপনাটি নিষ্কাশন করতে পারেন।


1

তালিকাগুলি যা তাদের মনে হয় - মানগুলির একটি তালিকা। এগুলির প্রত্যেকটির শূন্য থেকে শুরু করে প্রথম নম্বর দেওয়া হয় - প্রথমটি শূন্য থেকে দ্বিতীয়, দ্বিতীয় 1, তৃতীয় 2 ইত্যাদি You আপনি তালিকা থেকে মানগুলি সরিয়ে, এবং শেষ পর্যন্ত নতুন মান যুক্ত করতে পারেন। উদাহরণ: আপনার অনেক বিড়ালের নাম।

টিপলগুলি কেবল তালিকার মতো তবে আপনি তাদের মান পরিবর্তন করতে পারবেন না। আপনি যে মানগুলি প্রথমে তুলে ধরেন, সেগুলি হ'ল মানগুলি যা আপনি প্রোগ্রামের বাকী অংশে আটকে আছেন। আবার সহজ রেফারেন্সের জন্য প্রতিটি মান শূন্য থেকে শুরু করে নম্বরযুক্ত। উদাহরণ: বছরের মাসের নাম।

অভিধানের কি তাদের নাম প্রস্তাব দেওয়া একই রকম - একটি অভিধান। একটি অভিধানে আপনার শব্দের একটি 'সূচক' রয়েছে এবং তাদের প্রত্যেকের জন্য একটি সংজ্ঞা রয়েছে। পাইথনে শব্দটিকে 'কী' এবং সংজ্ঞাটিকে একটি 'মান' বলা হয়। একটি অভিধানের মানগুলি সংখ্যাযুক্ত নয় - তার নামের মতো যা বোঝায় - ডিকোশনারি are একটি অভিধানে আপনার শব্দের একটি 'সূচক' রয়েছে এবং তাদের প্রত্যেকের জন্য একটি সংজ্ঞা রয়েছে। পাইথনে শব্দটিকে 'কী' এবং সংজ্ঞাটিকে একটি 'মান' বলা হয়। একটি অভিধানের মানগুলি সংখ্যাযুক্ত নয় - সেগুলি কোনও নির্দিষ্ট ক্রমে নয়, হয় - কী একই কাজ করে। আপনি অভিধানগুলিতে মানগুলি যুক্ত করতে, অপসারণ করতে এবং সংশোধন করতে পারেন। উদাহরণ: টেলিফোন বই।


1

এগুলি ব্যবহার করার সময়, আমি আপনার রেফারেন্সের জন্য তাদের পদ্ধতিগুলির একটি বিস্তৃত চিটপত্র তৈরি করি:

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'}}

1

অভিধান: একটি পাইথন ডিকশনারি হ্যাশ টেবিলের মতো ব্যবহার করা হয় যা কী হিসাবে সূচক হিসাবে কী এবং মান হিসাবে বস্তু হয়।

তালিকা: অ্যারেতে অবজেক্টের অবস্থান অনুসারে সূচিকৃত অ্যারেতে অবজেক্টগুলি ধরে রাখার জন্য একটি তালিকা ব্যবহৃত হয়।

সেট: একটি সেট এমন একটি ফাংশন সহ একটি সংগ্রহ যা জানাতে পারে যে কোনও বস্তু সেটে উপস্থিত রয়েছে বা উপস্থিত নেই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.