লিস্ট পাইথনে সবচেয়ে বেশি ব্যবহৃত কন্টেইনার। লিস্ট রোটেশন (rotation) দিনদিনের প্রোগ্রামিং ও ওয়েব ডেভেলপমেন্টে খুব প্রয়োজনীয়। লিস্ট রোটেট করার একাধিক পদ্ধতি আছে।
পদ্ধতি ১: স্লাইসিং (Slicing) - সবচেয়ে সহজ ও পাইথনিক
# বামে ৩ ঘূরানো (left rotate by 3)
test_list = [1, 4, 6, 7, 2]
test_list = test_list[3:] + test_list[:3]
# ফলাফল: [7, 2, 1, 4, 6]
# ডানে ৩ ঘূরানো (right rotate by 3) - ফিরে আসবে
test_list = test_list[-3:] + test_list[:-3]
# ফলাফল: [1, 4, 6, 7, 2]
পদ্ধতি ২: লিস্ট কমপ্রিহেনশন (List Comprehension)
test_list = [1, 4, 6, 7, 2]
# বামে ৩ ঘূরানো
test_list = [test_list[(i + 3) % len(test_list)] for i, x in enumerate(test_list)]
# ফলাফল: [7, 2, 1, 4, 6]
# ডানে ৩ ঘূরানো
test_list = [test_list[(i - 3) % len(test_list)] for i, x in enumerate(test_list)]
# ফলাফল: [1, 4, 6, 7, 2]
পদ্ধতি ৩: collections.deque এর rotate() মেথড - O(1) অপারেশন
from collections import deque
test_list = [1, 4, 6, 7, 2]
# বামে ৩ ঘূরানো (নেগেটিভ ভ্যালু)
dq = deque(test_list)
dq.rotate(-3)
test_list = list(dq)
# ফলাফল: [7, 2, 1, 4, 6]
# ডানে ৩ ঘূরানো (পজিটিভ ভ্যালু)
dq = deque(test_list)
dq.rotate(3)
test_list = list(dq)
# ফলাফল: [1, 4, 6, 7, 2]
পারফরম্যান্স তুলনা
- Slicing: O(n) টাইম, O(n) স্পেস। ছোট লিস্টের জন্য খুব দ্রুত এবং পড়া সহজ।
- List comprehension: O(n) টাইম, O(n) স্পেস। ফ্লেক্সিবল কিন্তু স্লাইসিং থেকে ধীর।
- deque.rotate(): O(k) টাইম (k = রোটেশন স্টেপ), O(1) স্পেস (ইন-প্লেস)। বড় লিস্ট ও বারবার রোটেশনের জন্য সেরা।
সম্পূর্ণ আউটপুট উদাহরণ
Original list : [1, 4, 6, 7, 2] List after left rotate by 3 : [7, 2, 1, 4, 6] List after right rotate by 3(back to original) : [1, 4, 6, 7, 2] (সব পদ্ধতির আউটপুট একই)
কোনটি বেছে নেবেন?
- সাধারণ ব্যবহারের জন্য: Slicing (সহজ, পাইথনিক)
- বারবার রোটেশন বা বড় লিস্ট: deque.rotate() (দ্রুত, মেমরি দক্ষ)
- কাস্টম লজিক বা কন্ডিশনাল রোটেশন: List comprehension