কম্পিউটার টিউটোরিয়াল

পাইথন: লিস্টে আপ পাশের এলিমেন্ট (Adjacent Elements) বের করা

লিস্টের প্রতিটি এলিমেন্টের আগের এবং পরের এলিমেন্ট (adjacent elements) বের করার জন্য enumerate() এবং কন্ডিশনাল লজিক ব্যবহার করা হয়। প্রথম এবং শেষ এলিমেন্টের জন্য একপাশে None থাকে।

উদাহরণ


def get_adjacent_elements(lst):
    """প্রতিটি এলিমেন্টের (পূর্ববর্তী, পরবর্তী) টাপল রিটার্ন করে"""
    result = []
    for i, val in enumerate(lst):
        if i == 0:
            # প্রথম এলিমেন্ট: পূর্ববর্তী নেই
            result.append((None, lst[i + 1]))
        elif i == len(lst) - 1:
            # শেষ এলিমেন্ট: পরবর্তী নেই
            result.append((lst[i - 1], None))
        else:
            # মাঝপথি এলিমেন্ট: দুই পাশে আছে
            result.append((lst[i - 1], lst[i + 1]))
    return result

my_list = [13, 37, 58, 12, 41, 25, 48, 19, 23]
print("লিস্ট:", my_list)

adjacent = get_adjacent_elements(my_list)
print("আপ পাশের এলিমেন্ট:")
for i, (prev, nxt) in enumerate(adjacent):
    print(f"  ইন্ডেক্স {i} ({my_list[i]}): পূর্ববর্তী={prev}, পরবর্তী={nxt}")

আউটপুট


লিস্ট: [13, 37, 58, 12, 41, 25, 48, 19, 23]
আপ পাশের এলিমেন্ট:
  ইন্ডেক্স ০ (13): পূর্ববর্তী=None, পরবর্তী=37
  ইন্ডেক্স ১ (37): পূর্ববর্তী=13, পরবর্তী=58
  ইন্ডেক্স ২ (58): পূর্ববর্তী=37, পরবর্তী=12
  ইন্ডেক্স ৩ (12): পূর্ববর্তী=58, পরবর্তী=41
  ইন্ডেক্স ৪ (41): পূর্ববর্তী=12, পরবর্তী=25
  ইন্ডেক্স ৫ (25): পূর্ববর্তী=41, পরবর্তী=48
  ইন্ডেক্স ৬ (48): পূর্ববর্তী=25, পরবর্তী=19
  ইন্ডেক্স ৭ (19): পূর্ববর্তী=48, পরবর্তী=23
  ইন্ডেক্স ৮ (23): পূর্ববর্তী=19, পরবর্তী=None

zip দিয়ে পাইথনিক সংস্করণ


def get_adjacent_zip(lst):
    # পূর্ববর্তী: None + lst[:-1]
    # পরবর্তী: lst[1:] + None
    prev = [None] + lst[:-1]
    nxt = lst[1:] + [None]
    return list(zip(prev, nxt))

print(get_adjacent_zip(my_list))
# [(None, 37), (13, 58), (37, 12), (58, 41), (12, 25), (41, 48), (25, 19), (48, 23), (19, None)]

NumPy roll ব্যবহার (দ্রুত)


import numpy as np
arr = np.array(my_list)
prev = np.roll(arr, 1)
nxt = np.roll(arr, -1)
prev[0] = None  # বা np.nan
nxt[-1] = None
adjacent = list(zip(prev, nxt))

ব্যবহারিক ক্ষেত্র

  • টাইম সিরিজ: আগের/পরের টাইমস্টেপ বের করা
  • গ্রাফ ট্রাভার্সাল: নেইবারের সনাক্তকরণ
  • সিগন্যাল প্রসেসিং: ডিফারেন্স ক্যালকুলেশন
  1. পাইথনে দুটি লিস্টের ইন্ডেক্স-ভিত্তিক এলিমেন্ট ইকুয়েট করুন

  2. পাইথনে রেঞ্জের মধ্যে এলিমেন্ট ডিলিট করুন

  3. পাইথনে ইন্ডেক্স ভিত্তিক মাল্টি-লিস্টের সাথে লিস্ট এলিমেন্ট যোগ করা

  4. পাইথনে লিস্টের আকার বের করা