তালিকা এবং tuples মধ্যে পার্থক্য কি?


1018

পার্থক্য কি?

টিপলস / তালিকার সুবিধা / অসুবিধাগুলি কী কী?


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

98
টিপলস গণিতের একটি প্রাথমিক শব্দ, লাতিন থেকে উদ্ভূত (উইকিপিডিয়া দেখুন))
নিকো

128
জোড় -> ট্রিপল -> চতুর্ভুজ -> কুইন্টুপল -> সেক্সটুপল -> ওম, এটি কী বলে, আহ সোড, 7-টিপল -> 8-টিপল -> ... তাই জেনেরিক নাম হিসাবে 'টিপল'।
জন ফুহি

31
@JohnFouhy এটা ছয় বছরের পর বছর ধরে পরে, কিন্তু: ... heptuple, অষ্টগুণ, tuple-সঙ্গে-নয়-উপাদান, দশগুণ, undecuple, dodecuple ...: D:
অগাস্টা

18
@ মেগা উইজেট আমি ভেবেছিলাম আমরা প্রতিষ্ঠিত করব যে ননটুপল ছিল একটি list। ; ডি
আগস্ট

উত্তর:


1017

টিপলগুলি অপরিবর্তনীয় হওয়া ছাড়াও একটি অর্থগত পার্থক্য রয়েছে যা তাদের ব্যবহারকে গাইড করতে পারে। টিপলগুলি হ'ল ডিগ্রি স্ট্রাকচার (যেমন, তাদের এন্ট্রিগুলির পৃথক অর্থ রয়েছে), যখন তালিকাটি একজাতীয় ক্রম হয়। টিপলসের কাঠামো থাকে, তালিকার অর্ডার থাকে।

এই পার্থক্যটি ব্যবহার করা কোডটিকে আরও স্পষ্ট এবং বোধগম্য করে তোলে।

একটি উদাহরণ পৃষ্ঠার জোড়া এবং কোনও বইয়ের রেফারেন্স অবস্থানগুলির জন্য লাইন নম্বর হবে, যেমন:

my_location = (42, 11)  # page number, line number

এরপরে আপনি লোকেশনগুলিতে নোট সঞ্চয় করতে অভিধানের কী হিসাবে এটি ব্যবহার করতে পারেন। অন্যদিকে একটি তালিকা একাধিক অবস্থান সঞ্চয় করতে ব্যবহৃত হতে পারে। স্বাভাবিকভাবেই কেউ তালিকা থেকে অবস্থানগুলি যুক্ত করতে বা সরাতে চাইবে, সুতরাং এটি বোঝা যায় যে তালিকাটি পরিবর্তনযোগ্য। অন্যদিকে বিদ্যমান অবস্থান থেকে আইটেমগুলি যুক্ত করা বা অপসারণ করার কোনও মানে হয় না - তাই টিপলগুলি অপরিবর্তনীয়।

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

এই ইস্যুতে কিছু আকর্ষণীয় নিবন্ধ রয়েছে, যেমন "পাইথন টিপলস কেবলমাত্র ধ্রুবক তালিকাগুলি নয়" বা "পাইথন-এর তালিকা সম্পর্কিত বনাম তালিকাগুলি বোঝা" । অফিসিয়াল পাইথন ডকুমেন্টেশনেও এর উল্লেখ রয়েছে

"টিপলগুলি অপরিবর্তনীয় এবং সাধারণত একটি ভিন্ন ভিন্ন ক্রম থাকে ..."

স্ট্যাটিক্যালি টাইপ করা ভাষায় যেমন হাস্কেলের একটি টিপলের মানগুলি সাধারণত বিভিন্ন ধরণের থাকে এবং টিউপলের দৈর্ঘ্য অবশ্যই নির্ধারণ করতে হবে। একটি তালিকায় মানগুলির মধ্যে একই ধরণের মান এবং দৈর্ঘ্য নির্ধারিত হয় না। সুতরাং পার্থক্য খুব সুস্পষ্ট।

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


11
+1, বিশেষত দুর্দান্ত উদাহরণ সহ আপনার দ্বিতীয় লিঙ্কটির জন্য। এই উক্তিটিকে ভালবাসুন: "এই হালকা হালকা রেকর্ড বা কাঠামো হিসাবে কাজ করে" "
বাল্টিমার্ক

105
"তালিকাগুলি একজাতীয় ক্রম" - আমি পাইথনে নতুন, তবে তালিকাগুলি কি ভিন্নধর্মী নয়? ডকস.পাইথন.আর.পি.পি.কিউ / টিউটোরিয়াল / সিন্ড্রোডাকশন এইচটিটিএমএল থেকে : "তালিকার আইটেমগুলিতে সবার একই ধরণের দরকার নেই।" তবে আপনি আনুষ্ঠানিক ধারণাটি সম্পর্কে কথা বলছেন, এবং পাইথন এটি গ্রহণ করেন না।
ম্যাথু কর্নেল

13
"টিপল" এর একটি ভাল শব্দার্থ প্রতিশব্দ "রেকর্ড" হতে পারে। এটি নির্দিষ্ট ক্রমে সম্পর্কিত ডেটা আইটেমগুলির সংগ্রহ। আসলে আমার মনে হয় collections.namedtupleআরও ভাল বলা হবে collections.record। কোনও গ্রাহকের রেকর্ডে নাম এবং ঠিকানা অদলবদল করা, বলার কোনও অর্থ নেই; প্রকৃতপক্ষে, এটি করা সাধারণত একটি ত্রুটি হতে পারে, যা দ্বিপথের অপরিবর্তনীয়তা আপনাকে প্রতিশ্রুতিবদ্ধ হতে বাধা দেয়।
kindall

4
@ নাইকো: প্রসঙ্গে What would you do with such a list?, পিপিএল যখন যুক্তি হিসাবে কল্পনার অভাব ব্যবহার করে তখন আমি সর্বদা কাঁপুন । মিশ্র প্রকারের তালিকাগুলি ব্যবহার করা দুর্দান্ত উদাহরণস্বরূপ কিছু শ্রেণিবদ্ধ ডেটা স্ট্রাকচারের জন্য যেখানে প্রতিটি তালিকা শিশু তালিকা এবং মান-উপাদানগুলির সমন্বয়ে গঠিত।
সেবাস্তিয়ান মাচ

18
টিপলগুলি ভিন্ন ভিন্ন এবং তালিকাগুলি একজাতীয় বলা কি বিভ্রান্তিমূলক নয়? উদাহরণস্বরূপ একটি তালিকায় বিভিন্ন উপাত্তের মিশ্রণ থাকতে পারে যেমন l = [1, 2, 'a']। আপনি কী বলছেন তা আমি বুঝতে পারি না।
সেলিব্রিটিস

361

তালিকা এবং tuple মধ্যে পার্থক্য

  1. আক্ষরিক

    someTuple = (1,2)
    someList  = [1,2] 
    
  2. আয়তন

    a = tuple(range(1000))
    b = list(range(1000))
    
    a.__sizeof__() # 8024
    b.__sizeof__() # 9088
    

    একটি টিউপল অপারেশন ছোট আকারের কারণে, এটি কিছুটা দ্রুত হয়ে যায়, তবে আপনার বিপুল সংখ্যক উপাদান না আসা পর্যন্ত এটি উল্লেখ করার মতো নয়।

  3. অনুমোদিত ক্রিয়াকলাপ

    b    = [1,2]   
    b[0] = 3       # [3, 2]
    
    a    = (1,2)
    a[0] = 3       # Error
    

    এর অর্থ হ'ল আপনি কোনও উপাদান মুছতে বা একটি টিপল বাছাই করতে পারবেন না। তবে আপনি উভয় তালিকায় একটি নতুন উপাদান যুক্ত করতে পারেন এবং কেবলমাত্র এই পার্থক্যের সাথে টিপল করতে পারেন যেহেতু টিপলটি পরিবর্তনযোগ্য, তাই আপনি সত্যিই কোনও উপাদান যুক্ত করছেন না তবে আপনি একটি নতুন টিপল তৈরি করছেন, সুতরাং আইডি পরিবর্তিত হবে

    a     = (1,2)
    b     = [1,2]  
    
    id(a)          # 140230916716520
    id(b)          # 748527696
    
    a   += (3,)    # (1, 2, 3)
    b   += [3]     # [1, 2, 3]
    
    id(a)          # 140230916878160
    id(b)          # 748527696
    
  4. ব্যবহার

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

    a    = (1,2)
    b    = [1,2] 
    
    c = {a: 1}     # OK
    c = {b: 1}     # Error
    

সুতরাং যখন আমি তালিকা আকারকে বড় মানগুলিতে পুনরায় আকার দেওয়ার চেষ্টা করি তখন কী ঘটে? এটি কি মেমরির ঠিকানা পরিবর্তন করবে (যা আমি বিশ্বাস করি আইডিটি পরিবর্তন করা উচিত)। নাকি এটি আমার ত্রুটি ছুঁড়ে দেবে?
ভ্যান্ডারিংমাইন্ড

17
@ ওয়ান্ডারিংমাইন্ড: তালিকার মানগুলি যেখানে সংরক্ষণ করা হয় সেখানে মেমরি ঠিকানাটি মেমরি ঠিকানার মতো নয় list
টম

2
হুমম ... এই পোস্টের সমস্ত কোড নীচে প্রথম বাক্স বাদে প্রথমে 3. Permitted operationটিউপল কেস দেখায়। আমি জানি যে সাফল্য দেখাতে হবে তবে ত্রুটি, তবে এটি কয়েক মুহুর্তের জন্য আমার মাথার সাথে মিশে গেল।
ডিএমকেই --- প্রাক্তন-মডারেটর বিড়ালছানা

1
পয়েন্ট 3 এর অধীনে প্রদর্শিত হিসাবে, একটি একক উপাদান তালিকা হতে পারে one_item_list = [a], তবে one_tuple = (a,)এটি সম্পর্কিত টিউপল। পরিবর্তনশীল নামটি অনুসরণ করে কমাটি নোট করুন। তবে নোট করুন two_tuple = (a, b)। এটি আমাকে একাধিকবার ছুঁড়ে ফেলেছে (এখনও পাইথন 3 তে রয়েছে)।
mjkrause

1
@ চেং কারণ টিপলটি বাছাই করা এটিকে পরিবর্তন করতে পারে, অর্থাত্, এটির আইটেমগুলি পরিবর্তন করে change টিপলস এটি সমর্থন করে না। পাইথন একটি সাজানো tuple প্রাপ্ত করার সবচেয়ে সহজ উপায় হলtuple(sorted(the_unsorted_tuple))
ApproachingDarknessFish

204

আপনি যদি বেড়াতে যান, আপনি কোনও স্থির সময়ে কোনও স্থানে আপনার স্থানাঙ্কগুলি নোট করতে পারেন (x,y)

আপনি যদি নিজের যাত্রা রেকর্ড করতে চান তবে আপনি প্রতি কয়েক সেকেন্ডের জন্য তালিকায় নিজের অবস্থান যুক্ত করতে পারেন।

তবে আপনি অন্যভাবে এটি করতে পারেন নি।


37
এই উদাহরণটি নিছক একটি সম্মেলনের মতো দেখায়। লোকেরা তর্ক করতে পারে "আমি চাইলে স্থানাঙ্কগুলি নোট করতে আমি [x, y] এখনও ব্যবহার করতে পারি"। অতএব, এই উত্তরটি অপ্রত্যাশিত হিসাবে বিবেচনা করা হয় যদি না আরও একটি বাক্য হয়: "কেন স্থানাঙ্ক সংরক্ষণের জন্য আপনার তালিকা ব্যবহার করা উচিত নয় এর জন্য @ নাইকোর পোস্টটি পড়ুন"
রায়লুও

71
@ আইসবার্গ, আমার উত্তরটি স্বজ্ঞাততা বিকাশে সহায়তা করার জন্য। এটি বিষয়ের প্রতিটি সংক্ষিপ্ত বিবরণ অন্বেষণ করার উদ্দেশ্যে নয়।
ড্যান-জিএফ

8
চমৎকার উদাহরণ +1। এটি টিউপল উপাদানগুলির পরিপূরক প্রকৃতির উপর জোর দেয় (এখানে স্থানাঙ্কগুলি), যার কারণেই কোনও একটিতে সংশোধন করার অনুমতি নেই - কারণ এটি পুরো টিপলের অর্থ (এখানে একটি পয়েন্টের অবস্থান) পরিবর্তন করে।
হাও ওয়াং

77

মূল পার্থক্য হ'ল টিপলগুলি অপরিবর্তনীয়। এর অর্থ হ'ল একবার তৈরি করার পরে আপনি মানগুলিকে টিউপলে পরিবর্তন করতে পারবেন না।

সুতরাং আপনি যদি মান পরিবর্তন করতে প্রয়োজন একটি তালিকা ব্যবহার করুন।

টিপলস উপকারিতা:

  1. সামান্য কর্মক্ষমতা উন্নতি।
  2. একটি টিপল যেমন অবিচলিত হয় তেমন এটি অভিধানে কী হিসাবে ব্যবহার করা যেতে পারে।
  3. আপনি যদি এটিকে পরিবর্তন করতে না পারেন তবে অন্য কাউকেও করতে পারবেন না, যার অর্থ এটি হচ্ছে যে কোনও এপিআই ফাংশন ইত্যাদির বিষয়ে আপনাকে উদ্বিগ্ন হওয়ার দরকার নেই ইত্যাদি জিজ্ঞাসা না করেই আপনার টিপল পরিবর্তন করে।

14
নোট করুন যে একটি টিপল কেবলমাত্র অপরিবর্তনীয় যদি এর সমস্ত উপাদান থাকে । আপনি একই রকম বলতে পারবেন সমস্ত অপরিবর্তনীয় সংগ্রহের মতো, frozensetবা বিভিন্ন তৃতীয় পক্ষের হিমশীতল ডিক / ট্রি / ইত্যাদি। প্রকারভেদ, কিন্তু এগুলির মধ্যে কেউ আপনাকে পরিবর্তনীয় উপাদান যুক্ত করতে দেয় না। (এবং অবশ্যই একটি টিউপল কেবল তখনই হাস্যযোগ্য যদি এর সমস্ত উপাদানগুলি হয়, যা সাধারণ ইএএফপি উপায়ে পরিচালনা করা হয়, তাই d[1, [2]]উত্থাপন করবে TypeError: unhashable type: 'list'))
অ্যাবারনার্ট

1
একটি ডুপ্লল কেবল অভিধানে কী হিসাবে ব্যবহার করা যেতে পারে যদি এর সমস্ত উপাদানগুলি পরিবর্তনীয় হয়। এখানে
উইল দেরহাম

31

তালিকাগুলি পরিবর্তনযোগ্য; tuples হয় না।

ডকস.পিথন.আর. / 2 / টিউটোরিয়াল / ডেটাস্ট্রিকচারস html থেকে

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


1
আমি সত্যিই মনে করি আপনার অর্থার্থগত প্রভাবগুলিও বিবেচনা করা উচিত (নীচে আমার উত্তর দেখুন)।
নিকো

এখনই চেষ্টাটি খুব কমই মনে হচ্ছে, তবে মাথা আপ করার জন্য ধন্যবাদ thanks
ডাফাইমো

ছয় মাস পরে, এবং এই আপনি কি অবদান রাখতে পারেন? আমি সেই উত্তরটি তখনই দিয়েছিলাম কারণ আমার আসল উত্তর এবং অন্যদের মন্তব্যের মধ্যে যে চার ঘন্টা কেটে গেছে তার মধ্যে পার্থক্য তৈরির চেয়ে বেশি কিছু ছিল। উত্তরটি কি ভুল ছিল? আসলেই নয়, যদিও এটি নিকো দ্বারা উন্নত হয়েছিল। তাহলে একটি লিঙ্ক আসলে কী যুক্ত করবে?
duffymo

4
এখানে অন্যান্য উত্তরগুলির মতো একই গুণমান রয়েছে তা দেখতে মজার বিষয়, তবে কেবলমাত্র একজন মন্তব্যকারী "-১" বলে উল্লেখ করার কারণে এটি কেবল ঘৃণ্য হয়। এবং আরও একটি উত্তর আছে যা গুণমানের মাত্র 0.5 গুণ, তবে ডাউনভোটগুলি থেকে মাত্র 0.1 গুণ times
সেবাস্তিয়ান মাচ

2
@ ডিফাইমো আমি মনে করি যে এই উত্তরটি এই পৃষ্ঠায় সবচেয়ে পরিষ্কার এবং সংক্ষিপ্ত। এটি টিপলস এবং তালিকার মধ্যে একমাত্র সত্যই গুরুত্বপূর্ণ পার্থক্যের নাম দেয় এবং এই নির্মমভাবে মিথ্যা একজাতীয়-বনাম-ভিন্ন ভিন্ন হোগওয়াশ সম্পর্কে অন্তহীনভাবে উদ্বেগ প্রকাশ করে না।
15-15

20

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

>>> import numpy as np
>>> a = np.arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> idx = (1,1)
>>> a[idx]
4
>>> idx = [1,1]
>>> a[idx]
array([[3, 4, 5],
       [3, 4, 5]])

মুল বক্তব্যটি হ'ল, যদিও নুমপি স্ট্যান্ডার্ড লাইব্রেরির অংশ নাও থাকতে পারে, এটি একটি প্রধান পাইথন গ্রন্থাগার এবং নুমপির তালিকাগুলির মধ্যে এবং টিপলগুলি সম্পূর্ণ আলাদা জিনিস।


2
এটি সত্যিই সহায়ক উত্তর নয়। পার্থক্যটি হ'ল type(a_list) != type(a_tuple), সুতরাং লাইব্রেরি কোডের শাখাগুলির কোনও অংশ type(x)অন্যরকম আচরণ করবে
এরিক

1
ভাল কথা, আমি পোস্টটি সম্পাদনা করেছি: এটি সত্যই কেবল ইঙ্গিত করছে যে শব্দাবলীর নির্দেশিকাগুলি কয়েকটি লাইব্রেরিতে হার্ডকোড করা আছে।
শেপ

1
তৃতীয় পক্ষের লাইব্রেরির চেয়ে stdlib / বিল্টইনগুলির উদাহরণ ব্যবহার করা ভাল। এমন অনেকগুলি জায়গা রয়েছে যেখানে আপনি একক মান বা মানগুলির একটি দ্বিগুণ ব্যবহার করতে পারেন এবং একটি তালিকা বা অন্যান্য ক্রমকে একক মান হিসাবে বিবেচনা করা হয়। উদাহরণস্বরূপ, '%d %d' % [2, 3]এটি একটি TypeError, কারণ আপনি প্রথমে একটি তালিকা পাস করার চেষ্টা করছেন %dএবং আপনি দ্বিতীয়টিতে কোনও মান পাস করছেন না %d। (তবে max
এরও

এটি আকর্ষণীয়, আমি পাইনি অজগর স্ট্যান্ডার্ড লাইব্রেরিতে এর কোনও উদাহরণ রয়েছে। আপনি কয়টি জায়গায় বলছেন?
শেপ

18

তালিকাসমূহ লুপিং জন্য, tuples কাঠামো অর্থাত জন্য "%s %s" %tuple

তালিকাগুলি সাধারণত একজাতীয় হয়, টিপলগুলি সাধারণত ভিন্নজাতীয় হয়।

তালিকা পরিবর্তনশীল দৈর্ঘ্যের জন্য, টিপলস নির্দিষ্ট দৈর্ঘ্যের জন্য।


16

এটি পাইথন তালিকার উদাহরণ:

my_list = [0,1,2,3,4]
top_rock_list = ["Bohemian Rhapsody","Kashmir","Sweet Emotion", "Fortunate Son"]

এটি পাইথন টিপলের উদাহরণ:

my_tuple = (a,b,c,d,e)
celebrity_tuple = ("John", "Wayne", 90210, "Actor", "Male", "Dead")

পাইথন তালিকাগুলি এবং টিপলগুলি একই রকম যে এগুলি উভয়কেই মান সংগ্রহের আদেশ দেওয়া হয়। "[..., ...]" বন্ধনী ব্যবহার করে "(..., ...)" এবং "(..., ...)" টিউপস ব্যবহার করে তালিকার তৈরি অগভীর পার্থক্য ছাড়াও মূল প্রযুক্তিগত "পাইথন সিনট্যাক্সে হার্ড কোডিং" তাদের মধ্যে পার্থক্য এটি হ'ল কোনও নির্দিষ্ট টিউপলের উপাদানগুলি অপরিবর্তনীয়, তবে তালিকাগুলি পরিবর্তনযোগ্য (... সুতরাং কেবলমাত্র টিপলগুলি হ্যাশযোগ্য এবং অভিধান / হ্যাশ কী হিসাবে ব্যবহার করা যেতে পারে!)। এটি কীভাবে তারা ব্যবহার করতে পারে বা কীভাবে ব্যবহার করতে পারে না তার মধ্যে পার্থক্যের জন্ম দেয় (সিনট্যাক্স দ্বারা একটি প্রাইরি প্রয়োগ করা হয়) এবং লোকেরা কীভাবে তাদের ব্যবহার করতে বেছে নেয় তার মধ্যে পার্থক্য ('সেরা অনুশীলন হিসাবে উত্সাহিত করা,' পোস্টারিয়েরি, স্মার্ট প্রগ্রেমাররা এটিই করেন )। মানুষ উপাদান ক্রম দিতে।

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

তালিকার জন্য, 'অর্ডার' একটি ক্রম বা দিকনির্দেশকে বোঝায় sign দ্বিতীয় উপাদানটি প্রথম উপাদানটির পরে অবশ্যই আসে কারণ এটি একটি নির্দিষ্ট এবং সাধারণ স্কেল বা মাত্রার উপর ভিত্তি করে ২ য় স্থানে অবস্থিত। উপাদানগুলি সামগ্রিকভাবে নেওয়া হয় এবং বেশিরভাগই কোনও নির্দিষ্ট বৈশিষ্ট্যের জন্য ফর্মের একক প্রশ্নের উত্তর সরবরাহ করে , কীভাবে এই বিষয়গুলি / বিষয়গুলির তুলনা করা যায়? বৈশিষ্ট্য স্থির থাকে, অবজেক্ট / বিষয় পৃথক হয়।

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

কিছু সূক্ষ্ম বিবরণ সংক্ষিপ্ত বিবরণ

মিল:

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

    >>> my_list[0:3]
    [0,1,2]
    >>> my_tuple[0:3]
    [a,b,c]
  3. তুলনা এবং বাছাই করা - দুটি টিপল বা দুটি তালিকাগুলি উভয়ই তাদের প্রথম উপাদানটির সাথে তুলনা করা হয় এবং যদি কোনও টাই থাকে তবে দ্বিতীয় উপাদান দ্বারা, এবং আরও অনেক কিছু। পূর্ববর্তী উপাদানগুলি পার্থক্য দেখানোর পরে পরবর্তী উপাদানগুলিতে আর মনোযোগ দেওয়া হয় না।

    >>> [0,2,0,0,0,0]>[0,0,0,0,0,500]
    True
    >>> (0,2,0,0,0,0)>(0,0,0,0,0,500)
    True

পার্থক্য: - সংজ্ঞা অনুসারে একটি অগ্রাধিকার

  1. সিনট্যাক্স - তালিকার ব্যবহার [], টিপলস ব্যবহার ()

  2. মিউটিবিলিটি - প্রদত্ত তালিকার উপাদানগুলি পারস্পরিক পরিবর্তনযোগ্য, প্রদত্ত টুপলের উপাদানগুলি পরিবর্তনীয় নয়।

    # Lists are mutable:
    >>> top_rock_list
    ['Bohemian Rhapsody', 'Kashmir', 'Sweet Emotion', 'Fortunate Son']
    >>> top_rock_list[1]
    'Kashmir'
    >>> top_rock_list[1] = "Stairway to Heaven"
    >>> top_rock_list
    ['Bohemian Rhapsody', 'Stairway to Heaven', 'Sweet Emotion', 'Fortunate Son']
    
    # Tuples are NOT mutable:       
    >>> celebrity_tuple
    ('John', 'Wayne', 90210, 'Actor', 'Male', 'Dead')
    >>> celebrity_tuple[5]
    'Dead'
    >>> celebrity_tuple[5]="Alive"
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
  3. হ্যাশটবেল (অভিধান) - হিসাবে এটির চাবিগুলি হ্যাশযোগ্য এবং অতএব অপরিবর্তনীয়, কেবল টিপলগুলি অভিধান কী হিসাবে কাজ করতে পারে, তালিকা নয়।

    #Lists CAN'T act as keys for hashtables(dictionaries)
    >>> my_dict = {[a,b,c]:"some value"}
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'list'
    
    #Tuples CAN act as keys for hashtables(dictionaries)
    >>> my_dict = {("John","Wayne"): 90210}
    >>> my_dict
    {('John', 'Wayne'): 90210}

পার্থক্য - ব্যবহারের ক্ষেত্রে একটি পোস্টেরিয়েরি

  1. উপাদানসমূহের হোমো বনাম ভিন্ন ভিন্নতা - সাধারণত তালিকাভুক্ত বস্তুগুলি সমজাতীয় এবং দ্বিখণ্ডিত বস্তুগুলি ভিন্নজাতীয় হয়। তা হল, তালিকাগুলি একই ধরণের অবজেক্ট / বিষয়গুলির জন্য ব্যবহৃত হয় (সমস্ত রাষ্ট্রপতি প্রার্থী, বা সমস্ত গান, বা সমস্ত রানার যেমন) যদিও এটি বাধ্যতামূলক হয় না), যেখানে টিউপলগুলি ভিন্ন ভিন্ন ভিন্ন বস্তুর জন্য বেশি।

  2. লুপিং বনাম কাঠামো - যদিও উভয়ই লুপিংয়ের অনুমতি দেয় (মাই_লিস্টে এক্স এর জন্য ...) তবে এটি কেবলমাত্র তালিকার জন্য এটি করা বোধগম্য। তথ্য কাঠামোবদ্ধ ও উপস্থাপনের জন্য টিউপসগুলি আরও উপযুক্ত (% s% s% s এর মধ্যে থাকা একটি% s এবং বর্তমানে% s% ("জন", "ওয়েন", 90210, "অভিনেতা", "মৃত"))


আমি অপরিবর্তনীয়তার কারণ ব্যাখ্যা করার জন্য হ্যাশটেবল / হ্যাশেবল উদাহরণ পছন্দ করি - আপনি একটি ডুপের একটি জটিল কী হিসাবে একটি রেকর্ড (রেকর্ড / স্ট্রাক্ট / স্থানাঙ্ক / ভেক্টর / পয়েন্ট) ব্যবহার করতে পারেন।
ডেভ এক্স

9

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

সুবিধা এবং অসুবিধা ব্যবহার উপর নির্ভর করে। আপনার যদি এমন কোনও ডেটা থাকে যা আপনি কখনই পরিবর্তন করতে চান না তবে আপনার টিপল ব্যবহার করা উচিত, অন্যথায় তালিকাটি সেরা বিকল্প।


7

তালিকা এবং tuple মধ্যে পার্থক্য

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

  1. আক্ষরিক বাক্য গঠন

    আমরা একটি নতুন তালিকা পেতে টিউপস এবং বর্গাকার বন্ধনী নির্মাণের জন্য বন্ধনী ( ) ব্যবহার করি [ ]। এছাড়াও প্রয়োজনীয় কাঠামো - টিপল বা তালিকা পেতে আমরা উপযুক্ত ধরণের কল ব্যবহার করতে পারি।

    someTuple = (4,6)
    someList  = [2,6] 
  2. পরিবর্তনশীলতা

    টিপলগুলি অপরিবর্তনীয়, তবে তালিকাগুলি পরিবর্তনযোগ্য। এই পয়েন্টটি নিম্নলিখিতগুলির জন্য ভিত্তি।

  3. স্মৃতি এর ব্যবহার

    পরিবর্তনের কারণে আপনার তালিকাগুলির জন্য আরও মেমরি এবং টিউপসগুলির জন্য কম স্মৃতি দরকার।

  4. ব্যাপ্ত

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

  5. হ্যাশ

    টিপলগুলি হ্যাশযোগ্য এবং তালিকাগুলি নেই। এর অর্থ আপনি কোনও অভিধানে কী হিসাবে একটি টুপল ব্যবহার করতে পারেন। তালিকাটি অভিধানে কী হিসাবে ব্যবহার করা যাবে না, যেখানে একটি টুপল ব্যবহার করা যেতে পারে

    tup      = (1,2)
    list_    = [1,2] 
    
    c = {tup   : 1}     # ok
    c = {list_ : 1}     # error
  6. শব্দার্থবিদ্যা

    এই পয়েন্টটি সেরা অনুশীলন সম্পর্কে আরও বেশি। আপনার ভিন্ন ভিন্ন ডেটা স্ট্রাকচার হিসাবে টিপলস ব্যবহার করা উচিত, যখন তালিকাগুলি একজাতীয় ক্রম হয়।


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

6

তালিকাটি সমজাতীয় ক্রম হিসাবে লক্ষ্য করা যায়, যখন টিপলগুলি ভিন্ন ভিন্ন ডেটা কাঠামো।


26
এই মুহুর্তে, এই উত্তরটি আলোচনায় কিছু যুক্ত করে না, কারণ আরও অনেক ভাল উত্তর রয়েছে।
জোনাথন রেইনহার্ট

5

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

যদি এর ভিতরে tupleএকটি listবা একটি থাকে dictionaryতবে সেগুলি tupleনিজেই অপরিবর্তিত থাকলেও তা পরিবর্তন করা যায়।

উদাহরণস্বরূপ, ধরে নেওয়া যাক আমাদের একটি টুপল রয়েছে যার মধ্যে একটি তালিকা এবং অভিধান রয়েছে

my_tuple = (10,20,30,[40,50],{ 'a' : 10})

আমরা তালিকার বিষয়বস্তু হিসাবে পরিবর্তন করতে পারি

my_tuple[3][0] = 400
my_tuple[3][1] = 500

যা নতুন টিপলকে দেখতে সুন্দর করে তোলে

(10, 20, 30, [400, 500], {'a': 10})

আমরা ডুপ্লির ভিতরে ডিকশনারিও পরিবর্তন করতে পারি

my_tuple[4]['a'] = 500

যা সামগ্রিকভাবে টিপলকে দেখতে সুন্দর করে তুলবে

(10, 20, 30, [400, 500], {'a': 500})

এটি হ'ল কারণ listএবং এটি হ'ল dictionaryঅবজেক্ট এবং এই বস্তুগুলি পরিবর্তিত হচ্ছে না, তবে সামগ্রীগুলি এতে নির্দেশ করছে।

সুতরাং tupleকোনও ব্যতিক্রম ছাড়াই অব্যাহত থাকে


এই পোস্টটি উন্নত হবে যদি আপনি ব্যাখ্যা করেছিলেন যে " এগুলি পরিবর্তন করা যেতে পারে এমনকি যদি অচল অবস্থায় ডুবে থাকে" " কারণ সেই বস্তুগুলি যখন তাদের পরিচয় ধরে রাখে (তাই টুপলটি পরিবর্তিত হয়নি কারণ এতে এখনও একই জিনিস রয়েছে ...)।
ডিএমকেই --- প্রাক্তন-মডারেটর বিড়ালছানা

3

PEP 484 - প্রকার ইঙ্গিত বলছেন যে একটি উপাদানের ধরনের tupleস্বতন্ত্রভাবে টাইপ করা যেতে পারে; যাতে আপনি বলতে পারেন Tuple[str, int, float]; তবে একটি list, Listটাইপিং ক্লাসের সাথে কেবলমাত্র এক ধরণের প্যারামিটার নিতে পারে: List[str]যা ইঙ্গিত দেয় যে 2 এর পার্থক্যটি হ'ল পূর্বেরটি ভিন্নধর্মী, অন্যদিকে পরেরটি অভ্যন্তরীণভাবে সমজাতীয়।

এছাড়াও, স্ট্যান্ডার্ড গ্রন্থাগারটি বেশিরভাগ ক্ষেত্রে এমন স্ট্যান্ডার্ড ফাংশনগুলি থেকে ফিরতি মান হিসাবে টিপল ব্যবহার করে যেখানে সি একটি ফেরত দেয় struct


3

লোকেরা ইতিমধ্যে পার্থক্যগুলি উল্লেখ করেছে যেহেতু টিপলস কেন তা নিয়ে লিখব।

কেন tuples পছন্দ হয়?

ছোট টিপলসের জন্য বরাদ্দ অনুকূলিতকরণ

মেমরি বিভাজন কমাতে এবং বরাদ্দকে ত্বরান্বিত করতে পাইথন পুরানো টিপলগুলি পুনরায় ব্যবহার করে। যদি কোনও টিউপলের আর প্রয়োজন হয় না এবং এটি স্থায়ীভাবে মোছার পরিবর্তে 20 টিরও কম আইটেম থাকে পাইথন এটিকে একটি বিনামূল্যে তালিকায় নিয়ে যায়।

একটি নিখরচায় 20 টি গ্রুপে বিভক্ত, যেখানে প্রতিটি গ্রুপ 0 এবং 20 এর মধ্যে দৈর্ঘ্যের n এর টিপলগুলির একটি তালিকা উপস্থাপন করে Each প্রথম (শূন্য) গ্রুপে কেবলমাত্র 1 টি উপাদান রয়েছে এবং একটি খালি টিউপল উপস্থাপন করে।

>>> a = (1,2,3)
>>> id(a)
4427578104
>>> del a
>>> b = (1,2,4)
>>> id(b)
4427578104

উপরের উদাহরণে আমরা দেখতে পাচ্ছি যে a এবং b এর একই আইডি রয়েছে। এর কারণ আমরা অবিলম্বে একটি ধ্বংস হওয়া টুপল দখল করেছি যা ফ্রি তালিকায় ছিল।

তালিকা জন্য বরাদ্দ অপ্টিমাইজেশন

যেহেতু তালিকাগুলি সংশোধন করা যেতে পারে তাই পাইথন টিপলসের মতো একই অপটিমাইজেশন ব্যবহার করে না। তবে পাইথন তালিকাগুলিতেও একটি নিখরচায় তালিকা রয়েছে তবে এটি কেবল খালি বস্তুর জন্য ব্যবহৃত হয়। যদি কোনও খালি তালিকা মুছলে বা জিসির দ্বারা সংগ্রহ করা হয়, এটি পরে পুনরায় ব্যবহার করা যেতে পারে।

>>> a = []
>>> id(a)
4465566792
>>> del a
>>> b = []
>>> id(b)
4465566792

সূত্র: https://rushter.com/blog/python-lists-and-tuples/

টিপলগুলি তালিকার চেয়ে দক্ষ কেন? -> https://stackoverflow.com/a/22140115


2

5.3 নথি থেকে একটি দিকের উদ্ধৃতি টিপলস এবং সিকোয়েন্সস :

যদিও টিপলগুলি তালিকার সাথে সাদৃশ্যপূর্ণ বলে মনে হয় তবে এগুলি প্রায়শই বিভিন্ন পরিস্থিতিতে এবং বিভিন্ন উদ্দেশ্যে ব্যবহৃত হয়। Tuples হয় অপরিবর্তনীয় , এবং সাধারণত একটি ধারণ ভিন্নধর্মী ক্রম উপাদান মাধ্যমে ব্যবহার করা হয় যে unpacking (এই বিভাগে পরে দেখা হবে) অথবা ইন্ডেক্স (অথবা এমনকি namedtuples ক্ষেত্রে অ্যাট্রিবিউট দ্বারা)। তালিকাগুলি পরিবর্তনীয় এবং এগুলির উপাদানগুলি সাধারণত একজাতীয় থাকে এবং তালিকাটি পুনরাবৃত্তি করে অ্যাক্সেস করা হয় ।


1

প্রথমত, তারা উভয়ই পাইথনের নন-স্কেলার অবজেক্ট (যাকে যৌগিক বস্তু হিসাবেও পরিচিত)।

  • টিপলস, উপাদানের ক্রমযুক্ত ক্রম (যাতে কোনও এলিয়াসিং ইস্যু ছাড়াই কোনও বস্তু থাকতে পারে)
    • অপরিবর্তনীয় (টুপল, ইনট, ফ্লোট, স্ট্র)
    • কনটেনটেশন ব্যবহার করে +(একেবারে নতুন টিপল তৈরি করা হবে)
    • ইন্ডেক্সিং
    • slicing
    • (3,) # -> (3)পরিবর্তে সিঙ্গলটন(3) # -> 3
  • তালিকা (অন্যান্য ভাষায় অ্যারে), আদেশকৃত মানগুলির ক্রম
    • চপল
    • একক বস্তু [3]
    • ক্লোনিং new_array = origin_array[:]
    • তালিকা উপলব্ধি [x**2 for x in range(1,7)]আপনাকে দেয় [1,4,9,16,25,36](পাঠযোগ্য নয়)

তালিকা ব্যবহারের ফলে অ্যালিয়াসিং বাগও হতে পারে (একই জিনিসকে নির্দেশ করে দুটি স্বতন্ত্র পাথ)।


0

তালিকাগুলি পরিবর্তনীয় এবং টিপলগুলি অপরিবর্তনীয়। শুধু এই উদাহরণ বিবেচনা করুন।

a = ["1", "2", "ra", "sa"]    #list
b = ("1", "2", "ra", "sa")    #tuple

এখন তালিকা এবং টিপল এর সূচক মান পরিবর্তন করুন।

a[2] = 1000
print a     #output : ['1', '2', 1000, 'sa']
b[2] = 1000
print b     #output : TypeError: 'tuple' object does not support item assignment.

সুতরাং প্রমাণিত হয়েছে যে নীচের কোডটি টিপল সহ অবৈধ, কারণ আমরা একটি টুপল আপডেট করার চেষ্টা করেছি, যা অনুমোদিত নয়।


-1

তালিকাটি পরিবর্তনীয় এবং টিপলগুলি অপরিবর্তনীয়। পরিবর্তনযোগ্য এবং অপরিবর্তনীয় মধ্যে প্রধান পার্থক্য হ'ল মেমরির ব্যবহার যখন আপনি কোনও আইটেম যুক্ত করার চেষ্টা করছেন।

আপনি যখন একটি ভেরিয়েবল তৈরি করেন, কিছু স্থির মেমরি ভেরিয়েবলের জন্য বরাদ্দ করা হয়। যদি এটি একটি তালিকা হয় তবে প্রকৃতপক্ষে ব্যবহৃত চেয়ে বেশি মেমরি বরাদ্দ করা হয় assigned উদাহরণস্বরূপ, যদি বর্তমান মেমরি অ্যাসাইনমেন্টটি 100 বাইট হয়, আপনি যখন 101 তম বাইট যুক্ত করতে চান, তখন আরও 100 বাইট নির্ধারিত হবে (এক্ষেত্রে মোট 200 বাইট)।

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


2
এর মধ্যে কিছু প্রযুক্তিগতভাবে সত্য হলেও এটি পরিবর্তনীয় এবং পরিবর্তনীয় প্রকারের মধ্যে গুরুত্বপূর্ণ পার্থক্য নয়। বড় পার্থক্য হ'ল নির্মাণের পরে পরিবর্তনীয় ধরণের পরিবর্তন করা যেতে পারে, অপরিবর্তনীয় প্রকারগুলি পারে না।
রজার ফ্যান

1
হয় না কেন। স্মৃতিশক্তি এবং পরিবর্তনের একে অপরের সাথে কোনও সম্পর্ক নেই। এটি কেবলমাত্র তালিকার সাথে সম্পর্কিত একটি বাস্তবায়ন বিশদ। মেমরিটি ভেরিয়েবলগুলিতেও বরাদ্দ করা হয় না, এটি বস্তুগুলিকে বরাদ্দ করা হয়। ভেরিয়েবলগুলি কেবল তখন সেই বস্তুর উল্লেখ।
রজার ফ্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.