এক লিস্টের প্রতি N-তম ইন্ডেক্সে অন্য একটি লিস্টের এলিমেন্টগুলো ইনসার্ট (অ্যাপেন্ড) করার জন্য enumerate() এবং মডুলাস অপারেটর ব্যবহার করা হয়।
উদাহরণ
my_list = [13, 27, 48, 12, 21, 45, 28, 19, 63]
append_list = ['P', 'Y', 'T']
N = 3
print("মূল লিস্ট:", my_list)
print("অ্যাপেন্ড লিস্ট:", append_list)
print("N =", N)
result = []
for idx, val in enumerate(my_list):
if idx % N == 0:
# প্রতি N-তম ইন্ডেক্সে append_list-এর সব এলিমেন্ট যোগ
result.extend(append_list)
result.append(val)
print("ফলাফল:", result)
আউটপুট
মূল লিস্ট: [13, 27, 48, 12, 21, 45, 28, 19, 63]
অ্যাপেন্ড লিস্ট: ['P', 'Y', 'T']
N = 3
ফলাফল: ['P', 'Y', 'T', 13, 27, 48, 'P', 'Y', 'T', 12, 21, 45, 'P', 'Y', 'T', 28, 19, 63]
ব্যাখ্যা
- ইন্ডেক্স ০, ৩, ৬, ৯... (N-র গুণিতক) এ
append_listইনসার্ট হয় extend()দিয়ে লিস্টের সব এলিমেন্ট একসাথে যোগ হয়- মূল এলিমেন্টও তার পজিশনে থাকে
লিস্ট কম্প্রিহেনশন দিয়ে (ট্রিকি)
result = [
elem
for i, val in enumerate(my_list)
for elem in (append_list if i % N == 0 else []) + [val]
]
জেনারেটর ফাংশন (মেমরি ইফিশিয়েন্ট)
def insert_every_nth(source, to_insert, n):
for i, val in enumerate(source):
if i % n == 0:
yield from to_insert
yield val
result = list(insert_every_nth(my_list, append_list, N))
বিকল্প: স্লাইস অ্যাসাইনমেন্ট (ইন-প্লেস, উল্টা ক্রমে)
# ইন-প্লেস মডিফিকেশন (উল্টা থেকে যেতে হয় যাতে ইন্ডেক্স শিফট না হয়)
for i in range(len(my_list) - 1, -1, -1):
if i % N == 0:
my_list[i:i] = append_list # স্লাইস অ্যাসাইনমেন্ট
# এখন my_list মডিফাইড