1.آموزش تاپل ها در python ، معرفی تاپلها (Tuples) در پایتون
در پایتون، تاپل (Tuple) یکی از ساختارهای دادهای مهم و پرکاربرد است که مشابه لیستها است، اما با ویژگیهایی متفاوت. تاپلها برای ذخیره کردن مجموعهای از دادهها به صورت غیر قابل تغییر (immutable) استفاده میشوند. این به این معنی است که پس از ایجاد یک تاپل، نمیتوان آن را تغییر داد (مثلاً نمیتوان مقادیر داخل آن را تغییر یا حذف کرد). این ویژگی باعث میشود تاپلها برای کارهایی که نیاز به ثبات و ایمنی دادهها دارند، مناسب باشند.
1.1 ساختار تاپل ها
تاپلها با استفاده از پرانتز () تعریف میشوند و اعضای آن با ویرگول (,) از هم جدا میشوند.
# یک تاپل ساده my_tuple = (1, 2, 3, 4) # یک تاپل با انواع مختلف دادهها my_tuple2 = (1, "hello", 3.14, True)
اگر تنها یک عنصر داشته باشید، باید از ویرگول برای تشخیص تاپل استفاده کنید:
single_element_tuple = (42,) # این یک تاپل است، بدون ویرگول این فقط عدد 42 خواهد بود
1.2 ویژگیهای تاپلها
غیر قابل تغییر بودن (Immutability):
پس از ایجاد یک تاپل، نمیتوانید مقادیر آن را تغییر دهید.
این ویژگی باعث افزایش ایمنی دادهها و سرعت بیشتر در دسترسی به آنها میشود.
ترتیبپذیری (Ordered):
اعضای یک تاپل در پایتون به ترتیب قرار دارند و میتوانید به هر عنصر از طریق اندیس (index) دسترسی پیدا کنید.
قابلیت تودرتو بودن (Nested):
تاپلها میتوانند شامل تاپلهای دیگر یا انواع دادهای دیگر باشند.
پشتیبانی از عملیاتها:
تاپلها از عملیاتهایی مانند ترکیب (+)، تکرار (*) و جستجو (in) پشتیبانی میکنند.
قابلیت hash شدن:
به دلیل ویژگی غیر قابل تغییر بودن، تاپلها میتوانند به عنوان کلید در دیکشنریها استفاده شوند.
1.3 عملیاتهای اصلی روی تاپلها
دسترسی به اعضا (Indexing):
شما میتوانید به اعضای یک تاپل با استفاده از اندیسها دسترسی پیدا کنید (از ۰ شروع میشود). در ادامه در بخش دسترسی به اعضا بیشتر به این موضوع می پردازیم.
my_tuple = (1, 2, 3, 4) print(my_tuple[0]) # خروجی: 1 print(my_tuple[2]) # خروجی: 3
برش (Slicing):
شما میتوانید یک زیرمجموعه از تاپل را با استفاده از برش (slicing)
print(my_tuple[1:3]) # خروجی: (2, 3)
تعداد اعضای تاپل (Length):
برای به دست آوردن تعداد اعضای تاپل از تابع len() استفاده میکنید.
print(len(my_tuple)) # خروجی: 4
ترکیب دو تاپل (Concatenation):
میتوانید دو تاپل را با استفاده از علامت + ترکیب کنید.
tuple1 = (1, 2) tuple2 = (3, 4) combined_tuple = tuple1 + tuple2 print(combined_tuple) # خروجی: (1, 2, 3, 4)
تکرار تاپل (Repetition):
با استفاده از علامت * میتوانید یک تاپل را چندین بار تکرار کنید.
repeated_tuple = (1, 2) * 3 print(repeated_tuple) # خروجی: (1, 2, 1, 2, 1, 2)
جستجو در تاپل (Search):
میتوانید بررسی کنید که آیا یک مقدار خاص در تاپل وجود دارد یا نه.
my_tuple = (1, 2, 3, 4) print(3 in my_tuple) # خروجی: True print(5 in my_tuple) # خروجی: False
1.4 ویژگیهای خاص تاپلها
تاپلها و دیکشنریها:
چون تاپلها قابل تغییر نیستند، میتوانند به عنوان کلید در دیکشنریها استفاده شوند.
my_dict = {}
key = (1, 2)
my_dict[key] = "value"
print(my_dict) # خروجی: {(1, 2): 'value'}
تودرتو بودن تاپلها:
تاپلها میتوانند شامل تاپلهای دیگر باشند.
nested_tuple = (1, (2, 3), 4) print(nested_tuple[1]) # خروجی: (2, 3)
1.5 مقایسه تاپلها با لیستها

1.6 مثالهای کاربردی
مثال 1: استفاده از تاپلها برای ذخیره مختصات
coordinates = (40.7128, -74.0060) # مختصات نیویورک (عرض و طول جغرافیایی)
print(f"Latitude: {coordinates[0]}, Longitude: {coordinates[1]}")
مثال 2: استفاده از تاپلها به عنوان کلید در دیکشنری
locations = {}
locations[(40.7128, -74.0060)] = "New York"
locations[(34.0522, -118.2437)] = "Los Angeles"
print(locations)
2. دسترسی به تاپل ها
2.1 دسترسی به آیتمهای تاپل با استفاده از اندیسها:
اندیسها در پایتون از صفر شروع میشوند، بنابراین اولین عنصر تاپل در اندیس 0 قرار دارد، دومین عنصر در اندیس 1، و به همین ترتیب.
مانند:
my_tuple = ("apple", "banana", "cherry")
# دسترسی به آیتمهای تاپل با اندیس
print(my_tuple[0]) # اولین آیتم
print(my_tuple[1]) # دومین آیتم
print(my_tuple[2]) # سومین آیتم
خروجی:
apple banana cherry
در اینجا، با استفاده از اندیسها 0, 1 و 2 به ترتیب به اولین، دومین و سومین آیتمهای تاپل دسترسی پیدا کردهایم.
2.2 دسترسی به آیتمهای تاپل با استفاده از اندیس منفی:
همچنین میتوانیم از اندیسهای منفی برای دسترسی به آیتمها از انتهای تاپل استفاده کنیم. یعنی -1 به آخرین عنصر، -2 به قبل از آخرین عنصر و به همین ترتیب اشاره دارد.
مانند:
my_tuple = ("apple", "banana", "cherry")
# دسترسی به آیتمهای تاپل با اندیس منفی
print(my_tuple[-1]) # آخرین آیتم
print(my_tuple[-2]) # دومین آیتم از انتها
print(my_tuple[-3]) # سومین آیتم از انتها
خروجی:
cherry banana apple
در اینجا، از اندیسهای منفی -1, -2 و -3 استفاده کردیم تا از انتهای تاپل به ترتیب به آخرین، دومین و سومین آیتم دسترسی پیدا کنیم.
2.3 دسترسی به یک بخش از تاپل (اسلایسینگ):
شما میتوانید یک بخش از تاپل را با استفاده از تکنیک اسلایسینگ (slicing) استخراج کنید. اسلایسینگ به شما این امکان را میدهد که بخشی از تاپل را بر اساس اندیسهای شروع و پایان جدا کنید.
مانند:
my_tuple = ("apple", "banana", "cherry", "date", "elderberry")
# اسلایسینگ برای دسترسی به بخشی از تاپل
sub_tuple = my_tuple[1:4] # از اندیس 1 تا 3 (اندیس 4 شامل نمیشود)
print(sub_tuple)
خروجی:
('banana', 'cherry', 'date')
در اینجا، از اسلایسینگ استفاده کردهایم تا از اندیس 1 تا 3 (یعنی “banana”، “cherry”، و “date”) بخشهایی از تاپل را استخراج کنیم.
توجه: در اسلایسینگ، اندیس پایانی (در اینجا 4) شامل نمیشود، یعنی آیتمهایی از اندیس 1 تا 3 برمیگردند.
2.4 دسترسی به آیتمهای تاپل درون یک حلقه:
اگر بخواهید به تمامی آیتمهای یک تاپل دسترسی داشته باشید، میتوانید از یک حلقه (مثل for) استفاده کنید.
مانند:
my_tuple = ("apple", "banana", "cherry")
# استفاده از حلقه برای دسترسی به همه آیتمها
for item in my_tuple:
print(item)
خروجی:
apple banana cherry
در اینجا، از یک حلقه for برای پیمایش تمامی آیتمهای تاپل و چاپ آنها استفاده کردهایم.
2.5 دسترسی به ایتمها با استفاده از متد index():
اگر بخواهید ایندکس یک آیتم خاص در تاپل را پیدا کنید، میتوانید از متد index() استفاده کنید. این متد اولین موقعیت (ایندکس) یک مقدار مشخص را در تاپل برمیگرداند.
مانند:
my_tuple = ("apple", "banana", "cherry")
# پیدا کردن ایندکس یک آیتم
index_of_banana = my_tuple.index("banana")
print(index_of_banana)
خروجی: 1
در اینجا، متد index() ایندکس اولین “banana” را در تاپل پیدا کرده و آن را برمیگرداند که برابر با 1 است.
3. بروزرسانی تاپل ها
یکی از ویژگیهای مهم تاپلها (Tuples) این است که غیرقابل تغییر (immutable) هستند. این بدین معنی است که پس از تعریف یک تاپل، شما نمیتوانید آیتمهای داخل آن را تغییر دهید، حذف کنید یا به آنها اضافه کنید. بنابراین، برخلاف لیستها که تغییرپذیر (mutable) هستند، تاپلها قابل بروزرسانی نیستند.
3.1 تلاش برای تغییر یک عنصر در تاپل
اگر بخواهید یکی از عناصر یک تاپل را تغییر دهید، پایتون خطا میدهد چون تاپلها غیرقابل تغییر هستند.
my_tuple = (1, 2, 3, 4) # تلاش برای تغییر یک آیتم # این خط باعث بروز خطا خواهد شد my_tuple[1] = 99 # TypeError: 'tuple' object does not support item assignment
3.2 اضافه کردن یا حذف آیتمها در تاپل
علاوه بر تغییر مقادیر، نمیتوان آیتمها را از تاپلها حذف یا به آنها اضافه کرد.
my_tuple = (1, 2, 3) # تلاش برای اضافه کردن آیتم # این خط باعث بروز خطا خواهد شد my_tuple.append(4) # AttributeError: 'tuple' object has no attribute 'append' # تلاش برای حذف آیتم # این خط باعث بروز خطا خواهد شد my_tuple.remove(2) # AttributeError: 'tuple' object has no attribute 'remove'
3.3 ایجاد یک تاپل جدید از طریق تغییرات
اگر بخواهید یک تاپل را “بروزرسانی” کنید (مثلاً یک آیتم را تغییر یا به آن اضافه کنید)، باید یک تاپل جدید بسازید. برای این کار، میتوانید از ترکیب تاپلها استفاده کنید تا یک تغییر دلخواه ایجاد کنید.
مثال 1: تغییر یک عنصر خاص در تاپل با ایجاد یک تاپل جدید
my_tuple = (1, 2, 3, 4) # ایجاد یک تاپل جدید با تغییر مقدار عنصر در موقعیت 1 new_tuple = my_tuple[:1] + (99,) + my_tuple[2:] print(new_tuple) # خروجی: (1, 99, 3, 4)
در این مثال:
با استفاده از برش (slicing)، یک تاپل جدید ساخته شده است که ترکیبی از تاپل اصلی و آیتم جدید است.
مثال 2: افزودن یک آیتم جدید به تاپل با استفاده از ترکیب
my_tuple = (1, 2, 3) # اضافه کردن یک آیتم به انتهای تاپل new_tuple = my_tuple + (4,) print(new_tuple) # خروجی: (1, 2, 3, 4)
در اینجا، با استفاده از عملگر +، یک آیتم جدید به انتهای تاپل اضافه کردهایم.
3.4 حذف یک عنصر از تاپل
برای حذف یک عنصر خاص از تاپل، چون تاپلها غیرقابل تغییر هستند، باید یک تاپل جدید بسازید که شامل همه عناصر بجز عنصر مورد نظر باشد.
مثال: حذف یک عنصر از تاپل
my_tuple = (1, 2, 3, 4) # حذف عنصر 2 از تاپل new_tuple = tuple(x for x in my_tuple if x != 2) print(new_tuple) # خروجی: (1, 3, 4)
در اینجا، از یک تعبیر تولید (generator expression) برای ایجاد یک تاپل جدید استفاده کردهایم که شامل همه عناصر جز عنصر 2 است.
3.5 تغییرات با استفاده از لیستها
اگر واقعاً به تغییر آیتمها نیاز دارید، میتوانید ابتدا تاپل را به یک لیست تبدیل کنید، تغییرات مورد نظر را اعمال کنید، سپس دوباره آن را به یک تاپل تبدیل کنید.
مثال: تبدیل تاپل به لیست و تغییر آن
my_tuple = (1, 2, 3) # تبدیل تاپل به لیست temp_list = list(my_tuple) # تغییر یک عنصر در لیست temp_list[1] = 99 # تبدیل لیست به تاپل new_tuple = tuple(temp_list) print(new_tuple) # خروجی: (1, 99, 3)
4. باز کردن تاپل ها در پایتون
تاپلها (Tuples) مجموعههای غیرقابل تغییر (immutable) از دادهها هستند که مانند لیستها میتوانند حاوی انواع مختلفی از دادهها (اعداد، رشتهها، لیستها و غیره) باشند. یکی از عملیاتهای مفید در کار با تاپلها، باز کردن (Unpacking) آنها است. باز کردن تاپلها به شما این امکان را میدهد که مقادیر یک تاپل را مستقیماً به متغیرهای مختلف تخصیص دهید.
4.1 مفهوم باز کردن تاپلها:
باز کردن به معنای تخصیص مقادیر موجود در یک تاپل به متغیرها به صورت جداگانه است. این عمل به شما کمک میکند که به راحتی از دادههای موجود در یک تاپل استفاده کنید.
ساختار باز کردن تاپلها:
فرض کنید یک تاپل داریم که شامل چندین مقدار است:
person = ("Ali", 25, "Engineer")
برای دسترسی به هر یک از مقادیر درون این تاپل میتوانیم از باز کردن استفاده کنیم:
name, age, profession = person
در اینجا، مقادیر تاپل به ترتیب به متغیرهای name، age و `profession اختصاص داده میشوند. بعد از اجرای این کد، میتوانیم به مقادیر تاپل به صورت جداگانه دسترسی داشته باشیم:
print(name) # Ali print(age) # 25 print(profession) # Engineer
باز کردن یک تاپل با تعداد متغیرهای مختلف:
اگر تاپل تعداد بیشتری یا کمتری از مقادیر نسبت به تعداد متغیرها داشته باشد، خطای ValueError دریافت میکنید. برای مثال:
person = ("Sara", 30)
name, age, profession = person # این خط خطا میدهد
برای جلوگیری از این خطا، میتوانیم از متغیرهای اضافی مانند _ برای نادیده گرفتن برخی مقادیر استفاده کنیم یا از یک متغیر برای ذخیره مقادیر اضافی استفاده کنیم:
person = ("Sara", 30)
# نادیده گرفتن بعضی مقادیر
name, age, _ = person # فقط نام و سن را میخواهیم
print(name) # Sara
print(age) # 30
باز کردن تاپلهای تو در تو:
در صورتی که تاپل حاوی تاپلهای دیگری باشد (یعنی تاپلهای تو در تو)، میتوانید آنها را به شکل زیر باز کنید:
data = ("Alice", (1, 2), "Engineer")
name, (x, y), profession = data
print(name) # Alice
print(x, y) # 1 2
print(profession) # Engineer
در اینجا، (x, y) نشاندهنده باز کردن تاپل درون تاپل است.
استفاده از * برای باز کردن باقیمانده:
اگر بخواهید فقط برخی از مقادیر را باز کنید و بقیه مقادیر را نادیده بگیرید یا در یک متغیر خاص جمعآوری کنید، میتوانید از عملگر * استفاده کنید. این ویژگی از پایتون 3.0 به بعد اضافه شده است.
data = ("Alice", "Bob", "Charlie", "David")
first, second, *others = data
print(first) # Alice
print(second) # Bob
print(others) # ['Charlie', 'David']
در اینجا، مقادیر اضافی که در لیست others ذخیره میشوند.
5. حلقه درون تاپل
حلقهها یکی از ابزارهای مهم برای تکرار و انجام عملیات بر روی دادهها هستند. شما میتوانید از حلقهها برای دسترسی به اعضای یک تاپل نیز استفاده کنید. با استفاده از حلقهها میتوانیم هر یک از مقادیر تاپل را به صورت تکراری بررسی کرده یا عملیات خاصی روی آنها انجام دهیم.
در اینجا، چند روش متداول برای استفاده از حلقه درون تاپل را بررسی میکنیم:
5.1 استفاده از حلقه for برای عبور از اعضای یک تاپل
سادهترین روش برای پیمایش و دسترسی به مقادیر درون یک تاپل استفاده از حلقه for است.
مثال:
فرض کنید تاپلی به نام fruits داریم:
fruits = ("apple", "banana", "cherry", "date")
for fruit in fruits:
print(fruit)
خروجی این کد به شکل زیر خواهد بود:
apple banana cherry date
در این مثال، حلقه for به ترتیب هر عنصر از تاپل fruits را در متغیر fruit قرار داده و آن را چاپ میکند.
5.2 استفاده از enumerate برای دریافت اندیس و مقدار
گاهی اوقات نیاز دارید که همزمان با مقدار، اندیس آن را نیز داشته باشید. در این صورت میتوانید از تابع enumerate() استفاده کنید که اندیس و مقدار را به صورت همزمان برمیگرداند.
مثال:
fruits = ("apple", "banana", "cherry", "date")
for index, fruit in enumerate(fruits):
print(f"Index {index}: {fruit}")
خروجی:
Index 0: apple Index 1: banana Index 2: cherry Index 3: date
در اینجا، با استفاده از enumerate(), هم اندیس و هم مقدار هر عنصر از تاپل به ترتیب در دسترس است.
5.3 استفاده از for در حلقههای تو در تو (nested loops)
اگر تاپل شما شامل دیگر تاپلها یا دادههای پیچیده باشد (مانند لیستهای تو در تو یا تاپلهای تو در تو)، میتوانید از حلقههای تو در تو استفاده کنید.
مثال:
nested_tuple = (("apple", 1), ("banana", 2), ("cherry", 3))
for fruit, number in nested_tuple:
print(f"Fruit: {fruit}, Number: {number}")
خروجی:
Fruit: apple, Number: 1 Fruit: banana, Number: 2 Fruit: cherry, Number: 3
در این مثال، هر عنصر از تاپل nested_tuple خود یک تاپل دو عضوی است که با استفاده از باز کردن (unpacking) به دو متغیر fruit و number اختصاص داده میشود.
5.4 استفاده از while برای پیمایش تاپل
اگر به دلایلی بخواهید از حلقه while برای پیمایش یک تاپل استفاده کنید، میتوانید با استفاده از اندیسها و دسترسی به هر عنصر به صورت دستی این کار را انجام دهید.
مثال:
fruits = ("apple", "banana", "cherry", "date")
index = 0
while index < len(fruits):
print(fruits[index])
index += 1
خروجی مشابه با حالت حلقه for خواهد بود:
apple banana cherry date
در اینجا، حلقه while با استفاده از اندیسها به هر یک از اعضای تاپل دسترسی پیدا کرده و آنها را چاپ میکند.
5.5 استفاده از شرطها در حلقهها برای فیلتر کردن مقادیر
در حین پیمایش تاپل، میتوانید از دستور شرطی (if) استفاده کنید تا تنها مقادیر خاصی را پردازش کنید.
مثال:
فرض کنید میخواهیم تنها میوههای با طول نام بیشتر از 5 کاراکتر را چاپ کنیم:
fruits = ("apple", "banana", "cherry", "date")
for fruit in fruits:
if len(fruit) > 5:
print(fruit)
خروجی:
banana cherry
6. ترکیب 2 یا چند تاپل
ترکیب چندین تاپل به سادگی با استفاده از عملگر + انجام میشود. این عملگر باعث میشود که تاپلها به هم متصل شوند و یک تاپل جدید بسازند که شامل همه مقادیر از تاپلهای مختلف است. همچنین، در برخی موارد میتوانید از روشهای دیگری برای ترکیب تاپلها استفاده کنید که در ادامه بررسی خواهیم کرد.
6.1 ترکیب ساده دو یا چند تاپل
مثال:
tuple1 = (1, 2, 3) tuple2 = (4, 5, 6) tuple3 = (7, 8) # ترکیب دو تاپل combined = tuple1 + tuple2 print(combined) # خروجی: (1, 2, 3, 4, 5, 6) # ترکیب چند تاپل combined_all = tuple1 + tuple2 + tuple3 print(combined_all) # خروجی: (1, 2, 3, 4, 5, 6, 7, 8)
در این مثال، با استفاده از عملگر +، تاپلها به ترتیب به هم متصل میشوند و یک تاپل جدید ساخته میشود.
6.2 ترکیب تاپل با لیست
گاهی ممکن است بخواهید یک لیست را با یک تاپل ترکیب کنید. برای این کار میتوانید ابتدا لیست را تبدیل به تاپل کنید، سپس از عملگر + برای ترکیب استفاده کنید.
مثال:
tuple1 = (1, 2, 3) list1 = [4, 5, 6] # تبدیل لیست به تاپل و ترکیب با تاپل combined = tuple1 + tuple(list1) print(combined) # خروجی: (1, 2, 3, 4, 5, 6)
6.3 استفاده از * برای ترکیب تاپلها (Python 3.5 به بالا)
در پایتون 3.5 به بعد، از عملگر * میتوانید برای گسترش یا Unpacking و ترکیب تاپلها استفاده کنید. این روش مشابه استفاده از + است، اما از لحاظ سینتکسی خواناتر و کاربردیتر میتواند باشد.
مثال:
tuple1 = (1, 2, 3) tuple2 = (4, 5, 6) tuple3 = (7, 8) # ترکیب با استفاده از * combined = (*tuple1, *tuple2, *tuple3) print(combined) # خروجی: (1, 2, 3, 4, 5, 6, 7, 8)
در اینجا، با استفاده از *tuple1, *tuple2 و *tuple3، مقادیر هر تاپل به راحتی در تاپل جدید ترکیب میشوند.
6.4 ترکیب تاپلها با استفاده از tuple() و extend()
اگر نیاز به ترکیب تاپلها با لیست دارید و میخواهید تاپلی جدید بسازید، میتوانید ابتدا یک لیست بسازید، سپس آن را به تاپل تبدیل کنید.
مثال:
tuple1 = (1, 2, 3) tuple2 = (4, 5) # تبدیل به لیست و استفاده از extend برای ترکیب temp_list = list(tuple1) temp_list.extend(tuple2) # تبدیل لیست به تاپل result = tuple(temp_list) print(result) # خروجی: (1, 2, 3, 4, 5)
6.5 ترکیب تاپلها درون یک لیست
اگر چندین تاپل دارید و میخواهید آنها را درون یک لیست ترکیب کنید، میتوانید از روشهای مختلف برای تبدیل تاپلها به لیست استفاده کنید.
مثال:
tuple1 = (1, 2) tuple2 = (3, 4) tuple3 = (5, 6) # ترکیب تاپلها درون یک لیست combined_list = [tuple1, tuple2, tuple3] print(combined_list) # خروجی: [(1, 2), (3, 4), (5, 6)]
7. تفاوتهای تاپلها و لیستها
تاپلها (Tuples) و لیستها (Lists) در پایتون هر دو مجموعههایی از دادهها هستند که میتوانند شامل انواع مختلفی از مقادیر باشند. با این حال، این دو نوع داده تفاوتهای زیادی در نحوه استفاده، ویژگیها و عملکرد دارند. در ادامه به بررسی تفاوتهای مهم بین تاپلها و لیستها میپردازیم.
7.1 قابلیت تغییرپذیری (Mutability)
تاپلها (Tuples): غیرقابل تغییر (immutable) هستند. به این معنا که پس از ایجاد یک تاپل، شما نمیتوانید مقادیر آن را تغییر دهید، اضافه کنید یا حذف کنید.
مثال:
my_tuple = (1, 2, 3) my_tuple[0] = 4 # این خط خطا میدهد: TypeError: 'tuple' object does not support item assignment
لیستها (Lists): قابل تغییر (mutable) هستند. یعنی شما میتوانید عناصر یک لیست را تغییر دهید، اضافه کنید یا حذف کنید.
مثال:
my_list = [1, 2, 3] my_list[0] = 4 # تغییر مقدار اولین عنصر print(my_list) # خروجی: [4, 2, 3]
7.2 ساختار و نحوه ایجاد
تاپلها: با استفاده از پرانتز ( ) ایجاد میشوند.
مثال:
my_tuple = (1, 2, 3)
لیستها: با استفاده از براکت [ ] ایجاد میشوند.
مثال:
my_list = [1, 2, 3]
7.3 عملکرد (Performance)
تاپلها: به دلیل غیرقابل تغییر بودن، معمولاً سریعتر از لیستها هستند، به خصوص زمانی که شما قصد دارید فقط دادهها را ذخیره کنید و نیازی به تغییر آنها ندارید.
لیستها: به دلیل قابلیت تغییر، کمی کندتر از تاپلها هستند. این کندی معمولاً در عملیاتهایی مانند افزودن، حذف یا تغییر عناصر مشاهده میشود.
7.4 استفاده در دیکشنریها (Dictionaries)
تاپلها: از آنجا که تاپلها غیرقابل تغییر هستند، میتوانند به عنوان کلید در دیکشنریها استفاده شوند.
مثال:
my_dict = {("apple", "red"): 1, ("banana", "yellow"): 2}
print(my_dict[("apple", "red")]) # خروجی: 1
لیستها: از آنجا که لیستها قابل تغییر هستند، نمیتوانند به عنوان کلید در دیکشنریها استفاده شوند.
مثال:
my_dict = {[1, 2]: "value"} # این خط خطا میدهد: TypeError: unhashable type: 'list'
7.5 حافظه (Memory Usage)
تاپلها: به دلیل غیرقابل تغییر بودن، حافظه کمتری نسبت به لیستها مصرف میکنند. به طور کلی، تاپلها بهینهتر از لیستها از نظر استفاده از حافظه هستند.
لیستها: به دلیل ویژگیهای قابل تغییر، حافظه بیشتری مصرف میکنند. لیستها به فضای اضافی نیاز دارند تا امکان تغییر اندازه و عناصر آنها وجود داشته باشد.
7.6 امکانات و عملکردهای در دسترس
تاپلها: به دلیل اینکه غیرقابل تغییر هستند، عملیاتهایی مانند append()، remove() یا pop() برای آنها قابل استفاده نیست. تنها عملیاتی که میتوانید انجام دهید، دسترسی به مقادیر (با استفاده از ایندکس) و عملیاتهایی مانند پیمایش (iteration) یا ترکیب (concatenation) هستند.
مثال:
my_tuple = (1, 2, 3) # نمیتوانیم از append یا remove استفاده کنیم: # my_tuple.append(4) # خطا
لیستها: عملیاتهای متنوعی مانند افزودن (append)، حذف (remove)، تغییر اندازه (insert، pop)، و مرتبسازی (sort) برای لیستها موجود است.
مثال:
my_list = [1, 2, 3] my_list.append(4) # اضافه کردن عنصر به انتهای لیست my_list.remove(2) # حذف عنصر از لیست print(my_list) # خروجی: [1, 3, 4]
7.7 استفاده در حلقهها و پیمایش
هر دو نوع داده تاپلها و لیستها از لحاظ عملکرد در حلقهها مشابه هستند و میتوانند به راحتی مورد استفاده قرار بگیرند.
مثال:
# برای تاپل: my_tuple = (1, 2, 3) for item in my_tuple: print(item) # برای لیست: my_list = [1, 2, 3] for item in my_list: print(item)
7.8 پشتیبانی از عملیاتهای ریاضی و ترکیب
تاپلها: عملیاتهایی مانند ترکیب (concatenation) و تکرار (repetition) با استفاده از عملگرهای + و * به راحتی برای تاپلها قابل انجام است.
مثال:
tuple1 = (1, 2) tuple2 = (3, 4) combined = tuple1 + tuple2 # ترکیب تاپلها repeated = tuple1 * 3 # تکرار تاپل print(combined) # خروجی: (1, 2, 3, 4) print(repeated) # خروجی: (1, 2, 1, 2, 1, 2)
لیستها: همانند تاپلها، عملیاتهای ترکیب و تکرار با استفاده از + و * نیز برای لیستها امکانپذیر است.
8. عملیاتهای مختلف با تاپلها
تاپلها (Tuples) یکی از انواع دادههای موجود در پایتون هستند که مشابه لیستها عمل میکنند، با این تفاوت که تغییرناپذیر (immutable) هستند. به این معنی که پس از تعریف یک تاپل، نمیتوان محتویات آن را تغییر داد.
8.1 تعریف تاپلها
تاپلها مشابه لیستها هستند، اما تفاوت اصلی در این است که تاپلها غیرقابل تغییر هستند.
# تعریف یک تاپل my_tuple = (1, 2, 3, 4) print(my_tuple) # خروجی: (1, 2, 3, 4)
8.2 دسترسی به عناصر تاپل
برای دسترسی به عناصر یک تاپل، از اندیسها (index) استفاده میکنیم.
# دسترسی به عناصر تاپل print(my_tuple[0]) # خروجی: 1 print(my_tuple[2]) # خروجی: 3
یادآوری: همانند لیستها، اندیسها در پایتون از صفر شروع میشوند.
8.3 بریدن (Slicing) تاپل
میتوانیم با استفاده از بریدن (Slicing) بخشهای مختلفی از یک تاپل را استخراج کنیم.
# بریدن تاپل print(my_tuple[1:3]) # خروجی: (2, 3) print(my_tuple[:2]) # خروجی: (1, 2) print(my_tuple[2:]) # خروجی: (3, 4)
8.4 تکرار (Repetition) تاپلها
میتوانیم تاپلها را تکرار کرده و ترکیب کنیم.
# تکرار یک تاپل repeated_tuple = my_tuple * 2 print(repeated_tuple) # خروجی: (1, 2, 3, 4, 1, 2, 3, 4)
8.5 اتصال (Concatenation) تاپلها
برای ترکیب دو یا چند تاپل، از عملگر + استفاده میکنیم.
# اتصال دو تاپل tuple1 = (1, 2) tuple2 = (3, 4) combined_tuple = tuple1 + tuple2 print(combined_tuple) # خروجی: (1, 2, 3, 4)
8.6 بررسی عضویت (Membership) در تاپلها
میتوانیم بررسی کنیم که یک عنصر در تاپل موجود است یا خیر.
# بررسی عضویت print(3 in my_tuple) # خروجی: True print(5 in my_tuple) # خروجی: False
8.7 شمارش تعداد تکرار یک عنصر (Count)
پایتون امکان شمارش تعداد تکرار یک عنصر در یک تاپل را فراهم میکند.
# شمارش تعداد تکرار یک عنصر my_tuple = (1, 2, 3, 1, 2, 1) print(my_tuple.count(1)) # خروجی: 3 print(my_tuple.count(2)) # خروجی: 2
8.8 یافتن اندیس (Index) یک عنصر در تاپل
با استفاده از متد index() میتوانیم اندیس اولین رخداد یک عنصر در تاپل را بیابیم.
# یافتن اندیس یک عنصر print(my_tuple.index(2)) # خروجی: 1 print(my_tuple.index(1)) # خروجی: 0
یادآوری: اگر عنصر در تاپل وجود نداشته باشد، یک خطای ValueError ایجاد میشود.
8.9 تغییر دادن (ویرایش) یک تاپل
تاپلها تغییرناپذیر هستند، بنابراین نمیتوانیم به طور مستقیم یک عنصر را تغییر دهیم. با این حال، میتوانیم با استفاده از ترکیب با لیستها، تغییراتی را در آنها اعمال کنیم.
# تغییر یک تاپل (غیرمستقیم) my_list = list(my_tuple) # تبدیل تاپل به لیست my_list[0] = 99 # تغییر عنصر new_tuple = tuple(my_list) # تبدیل مجدد به تاپل print(new_tuple) # خروجی: (99, 2, 3, 1, 2, 1)
8.10 طول تاپل (Length)
برای به دست آوردن طول یک تاپل از تابع len() استفاده میکنیم.
# طول تاپل print(len(my_tuple)) # خروجی: 6
8.11 تاپلهای تو در تو (Nested Tuples)
تاپلها میتوانند شامل دیگر تاپلها (تاپلهای تو در تو) باشند.
# تاپل تو در تو nested_tuple = ((1, 2), (3, 4), (5, 6)) print(nested_tuple[1]) # خروجی: (3, 4) print(nested_tuple[1][0]) # خروجی: 3
8.12 تاپلهای نامگذاری شده (Named Tuples)
تاپلهای نامگذاری شده، که در کتابخانهی collections وجود دارند، مشابه تاپلها هستند اما میتوانیم به جای دسترسی با اندیس، از نامهای مشخص برای دسترسی به مقادیر استفاده کنیم.
from collections import namedtuple
# تعریف یک تاپل نامگذاری شده
Person = namedtuple('Person', ['name', 'age'])
p = Person(name="Ali", age=25)
# دسترسی به مقادیر
print(p.name) # خروجی: Ali
print(p.age) # خروجی: 25
