পাইথনে বর্গাকার বন্ধনী এবং বন্ধনী দ্বারা আবদ্ধ তালিকার মধ্যে পার্থক্য কী?


174
>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2

তারা উভয় বৈধ? কোনও কারণে কোনওটি পছন্দ হয়?


3
শুধু অবগতির জন্য: তার মাঝে একটি আরো গভীর পার্থক্য (i for i in ...)এবং [i for i in ...]
রিক পোগি

2
@ রিকপোগি: গভীর পার্থক্য কী? আপনি দয়া করে বিস্তারিত বলতে পারেন?
qazwsx

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

উত্তর:


275

স্কয়ার বন্ধনীগুলি তালিকাগুলি হয় যখন বন্ধনীগুলি টিপলস হয়

একটি তালিকা পরিবর্তনীয়, যার অর্থ আপনি এর সামগ্রীগুলি পরিবর্তন করতে পারেন:

>>> x = [1,2]
>>> x.append(3)
>>> x
[1, 2, 3]

যখন টিপলস হয় না:

>>> x = (1,2)
>>> x
(1, 2)
>>> x.append(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'

অন্যান্য প্রধান পার্থক্য হ'ল একটি টিপল হ্যাশেবল, যার অর্থ আপনি এটি অন্যান্য বিষয়ের মধ্যে অভিধানের কী হিসাবে ব্যবহার করতে পারেন। উদাহরণ স্বরূপ:

>>> x = (1,2)
>>> y = [1,2]
>>> z = {}
>>> z[x] = 3
>>> z
{(1, 2): 3}
>>> z[y] = 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

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

>>> x = (1,2)
>>> x += (3,)
>>> x
(1, 2, 3)

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

>>> x = (1,2)
>>> y = x
>>> x += (3,)
>>> x
(1, 2, 3)
>>> y
(1, 2)

অন্যদিকে, যদি আপনি একটি তালিকা সহ একই উদাহরণটি তৈরি করেন yতবে এটি আপডেট করা হবে:

>>> x = [1, 2]
>>> y = x
>>> x += [3]
>>> x
[1, 2, 3]
>>> y
[1, 2, 3]

1
পার্থক্যগুলি তালিকাভুক্ত করার জন্য ভাল এখনও সহজ উদাহরণ। ধন্যবাদ!
ডাঃ এসেন

8

একটি আকর্ষণীয় পার্থক্য:

lst=[1]
print lst          // prints [1]
print type(lst)    // prints <type 'list'>

notATuple=(1)
print notATuple        // prints 1
print type(notATuple)  // prints <type 'int'>
                                         ^^ instead of tuple(expected)

একটি কমাতে অবশ্যই একটি টিউলে অন্তর্ভুক্ত করা উচিত যদিও এতে কেবলমাত্র একক মান থাকে। যেমন (1,)পরিবর্তে (1)


ধন্যবাদ. এই আমি খুঁজছিলাম ছিল। আমি যে কোডটি দেখেছি তাতে একটি (list1 + list2 + list3) ছিল এবং এটি একটি তালিকার পরিবর্তে, একটি টিপল নয়।
হাকআইট

4

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

In [1]: x = (1, 2)

In [2]: x[0] = 3
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/home/user/<ipython console> in <module>()

TypeError: 'tuple' object does not support item assignment

3

বন্ধনী এবং প্রথম বন্ধনী পৃথক করার অন্য উপায়টি হল বর্গাকার বন্ধনীগুলি তালিকা অনুধাবনকে বর্ণনা করতে পারে, যেমন [x for x in y]

যদিও সম্পর্কিত প্যারেন্টিস্টিক সিনট্যাক্স একটি টুপল জেনারেটর নির্দিষ্ট করে :(x for x in y)

আপনি ব্যবহার করে একটি দ্বৈত বোধগম্যতা পেতে পারেন: tuple(x for x in y)

দেখুন: পাইথনে টুপল বোঝা নেই কেন?



2

কমা দ্বারা পৃথকীকৃত দ্বারা ঘিরা আইটেম (এবং )হয় tupleএস, তাদের দ্বারা ঘিরা [এবং ]হয় listগুলি।


1
এমন কোনও তালিকা নেই যা "বৃত্তাকার" বন্ধনী দ্বারা আবদ্ধ, সেগুলি টিপলস! তবে আপনি সম্ভবত সঠিক জিনিসটি বোঝাতে চাইছেন। :P
গেন্ডারো

1
(এবং) দ্বারা আবদ্ধ তালিকাগুলি হল .. আমি বিভ্রান্ত, তারা তালিকা বা টিপলস?
জুলিওমেলগ্রিয়া

@ julio.alegria আমি কি @FlopCoder লেখার অভিপ্রেত ছিল মনে হয় " চলছে দ্বারা ঘিরা (এবং )হয় tupleএস, দ্বারা ঘিরা যারা [এবং ]হয় listগুলি।"
ফ্যানরল করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.