نمایه سازی منفی در پایتون، با مثال 🐍

پایتون به دلیل سادگی و خوانایی اش شناخته شده است و آن را به یک انتخاب محبوب برای مبتدیان و توسعه دهندگان باتجربه تبدیل می کند. یکی از ویژگی هایی که به انعطاف پذیری آن کمک می کند، نمایه سازی منفی است.
در این آموزش به این می پردازم که نمایه سازی منفی چیست، چگونه کار می کند و کاربردهای عملی آن در برنامه نویسی پایتون.
فهرست مطالب
1. مقدمه ای بر نمایه سازی
نمایه سازی راهی برای دسترسی به عناصر منفرد از دنباله هایی مانند لیست ها، رشته ها و تاپل ها در پایتون است.
به هر عنصر در یک دنباله یک شاخص منحصر به فرد اختصاص داده می شود که از 0 شروع می شود.
به عنوان مثال، در لیست numbers = [10, 20, 30, 40, 50]
، شاخص عنصر اول (10) 0، عنصر دوم (20) 1 و غیره است.
مثال:
numbers = [10, 20, 30, 40, 50]
print(numbers[0]) # Output: 10
print(numbers[1]) # Output: 20
2. در مورد نمایه سازی منفی چطور؟
نمایه سازی منفی یک ویژگی قدرتمند در پایتون است که به شما امکان می دهد از انتهای یک دنباله به عناصر دسترسی داشته باشید.
به جای شروع از 0، شاخص های منفی از 1- شروع می شوند که مربوط به آخرین عنصر دنباله است.
این می تواند به ویژه زمانی مفید باشد که شما نیاز به کار با عناصر در انتهای یک دنباله دارید بدون اینکه مشخصاً طول آن را بدانید.
مثال:
numbers = [10, 20, 30, 40, 50]
print(numbers[-1]) # Output: 50
print(numbers[-2]) # Output: 40
3. استفاده از نمایه سازی منفی در لیست ها
نمایه سازی منفی می تواند به ویژه زمانی مفید باشد که شما نیاز به دسترسی به عناصر انتهای لیست بدون اطلاع از طول آن دارید.
این به شما این امکان را می دهد که به راحتی لیست ها را با ارجاع به عناصر انتهایی دستکاری کنید.
مثال:
numbers = [10, 20, 30, 40, 50]
# Accessing the last element
print(numbers[-1]) # Output: 50
# Accessing the second last element
print(numbers[-2]) # Output: 40
همچنین می توانید از نمایه سازی منفی برای برش دادن لیست ها استفاده کنید.
مثال:
numbers = [10, 20, 30, 40, 50]
# Slicing the last three elements
print(numbers[-3:]) # Output: [30, 40, 50]
# Slicing from the second last to the last element
print(numbers[-2:]) # Output: [40, 50]
4. نمایه سازی منفی با رشته ها
درست مانند لیست ها، رشته ها نیز از نمایه سازی منفی پشتیبانی می کنند. این ویژگی به شما اجازه می دهد تا با زیر رشته ها از انتهای رشته کار کنید.
این یک روش قدرتمند برای دستکاری متن بدون نیاز به محاسبه طول یا ایجاد شرایط برش پیچیده است.
مثال:
text = "Hello, World!"
# Accessing the last character
print(text[-1]) # Output: '!'
# Accessing the second last character
print(text[-2]) # Output: 'd'
شما همچنین می توانید رشته ها را با استفاده از شاخص های منفی برش دهید.
مثال:
text = "Hello, World!"
# Slicing the last 5 characters
print(text[-5:]) # Output: 'orld!'
# Slicing from the second last to the end
print(text[-2:]) # Output: 'd!'
5. نمایه سازی منفی در تاپل ها
تاپل ها که دنباله های تغییرناپذیر هستند، از نمایه سازی منفی نیز پشتیبانی می کنند. این می تواند برای دسترسی به عناصر بدون تغییر تاپل مفید باشد.
مثال:
coordinates = (1, 2, 3, 4, 5)
# Accessing the last element
print(coordinates[-1]) # Output: 5
# Accessing the second last element
print(coordinates[-2]) # Output: 4
6. نمایه سازی منفی در برش
برش با شاخص های منفی می تواند به ویژه قدرتمند باشد. این امکان استخراج انعطافپذیرتر و شهودی دنبالههای فرعی از فهرستها، رشتهها و تاپلها را فراهم میکند.
مثال:
# Reversing a list
numbers = [10, 20, 30, 40, 50]
reversed_numbers = numbers[::-1]
print(reversed_numbers) # Output: [50, 40, 30, 20, 10]
# Skipping elements
skip_elements = numbers[::2]
print(skip_elements) # Output: [10, 30, 50]
# Reversing a string
text = "Hello, World!"
reversed_text = text[::-1]
print(reversed_text) # Output: '!dlroW ,olleH'
7. مثال های عملی
معکوس کردن یک لیست
معکوس کردن یک لیست با استفاده از نمایه سازی منفی یک راه حل ساده و ظریف است.
numbers = [10, 20, 30, 40, 50]
reversed_numbers = numbers[::-1]
print(reversed_numbers) # Output: [50, 40, 30, 20, 10]
بررسی پالیندروم ها
میتوانید از نمایهسازی منفی برای بررسی اینکه آیا یک رشته یک رشته پالیندروم است (رشتهای که جلو و عقب یکسان میخواند) استفاده کنید.
def is_palindrome(s):
return s == s[::-1]
print(is_palindrome("radar")) # Output: True
print(is_palindrome("python")) # Output: False
چرخاندن یک لیست
شما می توانید یک لیست را با استفاده از نمایه سازی منفی به سمت راست بچرخانید. این می تواند به ویژه در الگوریتم هایی که چرخش لیست مورد نیاز است مفید باشد.
def rotate_right(lst, k):
k = k % len(lst) # Handle rotation greater than list length
return lst[-k:] + lst[:-k]
numbers = [10, 20, 30, 40, 50]
rotated_numbers = rotate_right(numbers, 2)
print(rotated_numbers) # Output: [40, 50, 10, 20, 30]
8. موارد استفاده پیشرفته
پارتیشن بندی لیست پویا
از نمایه سازی منفی می توان برای پارتیشن بندی پویا لیست ها بر اساس شرایط یا محاسبات استفاده کرد. این به ویژه در سناریوهایی مانند پردازش داده ها یا هنگام کار با مجموعه داده های پویا مفید است.
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Split data into two parts: last 3 elements and the rest
split_point = -3
part1, part2 = data[:split_point], data[split_point:]
print(part1) # Output: [1, 2, 3, 4, 5, 6, 7]
print(part2) # Output: [8, 9, 10]
پردازش دم کارآمد
هنگام کار با گزارشها یا جریاندادن دادهها، ممکن است اغلب لازم باشد فقط جدیدترین ورودیها را پردازش کنید. نمایه سازی منفی با امکان دسترسی سریع به انتهای لیست این کار را ساده می کند.
log_entries = ["entry1", "entry2", "entry3", "entry4", "entry5"]
# Get the last 2 log entries
recent_entries = log_entries[-2:]
print(recent_entries) # Output: ['entry4', 'entry5']
پنجره کشویی برای داده های سری زمانی
برای تجزیه و تحلیل سری های زمانی، ممکن است لازم باشد با پنجره های کشویی کار کنید. نمایه سازی منفی می تواند به شما در مدیریت آسان این پنجره ها کمک کند.
time_series = [100, 200, 300, 400, 500, 600, 700]
# Get the last 3 elements as a sliding window
window_size = 3
sliding_window = time_series[-window_size:]
print(sliding_window) # Output: [500, 600, 700]
9. دام های رایج و نحوه اجتناب از آنها
نمایه خارج از محدوده
نمایه سازی منفی گاهی اوقات می تواند منجر به IndexError شود اگر به درستی مدیریت نشود. اطمینان حاصل کنید که شاخص های منفی شما در محدوده طول دنباله قرار دارند.
مثال:
numbers = [10, 20, 30, 40, 50]
# This will raise an IndexError
try:
print(numbers[-6])
except IndexError as e:
print(e) # Output: list index out of range
استفاده از شاخص منفی در برش با مرحله
هنگام برش با یک پله، مراقب شاخص های منفی باشید تا از سردرگمی جلوگیری کنید و از درست بودن جهت برش اطمینان حاصل کنید.
مثال:
numbers = [10, 20, 30, 40, 50]
# This will return an empty list because the start is after the stop
print(numbers[-1:-3:-1]) # Output: [50, 40]
# Correct way
print(numbers[-3:-1]) # Output: [30, 40]
10. نتیجه گیری
نمایه سازی منفی یک ویژگی ساده و در عین حال قدرتمند در پایتون است که می تواند کد شما را مختصرتر و خواناتر کند.
با استفاده از شاخص های منفی، می توانید بدون نیاز به محاسبه موقعیت آنها به عناصر در انتهای دنباله ها دسترسی داشته باشید و آنها را دستکاری کنید.
با دنباله های مختلف آزمایش کنید و ببینید چگونه می توان از نمایه سازی منفی برای حل مشکلات دنیای واقعی در پروژه های شما استفاده کرد.