নেস্টেড লিস্ট (লিস্টের মধ্যে লিস্ট) কে একক লিস্টে রূপান্তর করা (flattening) একটি সাধারণ কাজ। নিচে পাঁচটি পদ্ধতির পারফরম্যান্স এবং ব্যবহারিক দিক দিয়ে তুলনা করা হলো।
উদাহরণ
ini_list = [[1, 2, 3], [3, 6, 7], [7, 5, 4]] # প্রত্যাশিত আউটপুট: [1, 2, 3, 3, 6, 7, 7, 5, 4]
১. itertools.chain.from_iterable (দ্রুত এবং মেমরি-দক্ষ)
from itertools import chain flatten_list = list(chain.from_iterable(ini_list)) print(flatten_list)
২. লিস্ট কাম্প্রিহেনশন (সর্বাধিক পাইথনিক এবং পঠনযোগ্য)
flatten_list = [j for sub in ini_list for j in sub] print(flatten_list)
৩. functools.reduce ব্যবহার করে
from functools import reduce flatten_list = reduce(lambda z, y: z + y, ini_list) print(flatten_list)
৪. sum() ফাংশন ব্যবহার করে (সरल কিন্তু ধীর)
flatten_list = sum(ini_list, []) print(flatten_list)
৫. রিকারসিভ ল্যাম্বডা (গভীর নেস্টেড লিস্টের জন্য)
flatten_list = lambda y: [x for a in y for x in flatten_list(a)] if type(y) is list else [y] print(flatten_list(ini_list))
পারফরম্যান্স তুলনা (বড় লিস্টের জন্য)
| পদ্ধতি | সময় জটিলতা | মেমরি | পঠনযোগ্যতা | সুপারিশ |
|---|---|---|---|---|
| chain.from_iterable | O(N) | কম (ইটারেটর) | মাঝারি | বড় ডেটা, পারফরম্যান্স-ক্রিটিক্যাল |
| লিস্ট কাম্প্রিহেনশন | O(N) | মাঝারি | উচ্চ | সাধারণ ব্যবহারের জন্য সেরা |
| reduce | O(N²)* | উচ্চ | কম | এড়িয়ে চলুন |
| sum() | O(N²)* | উচ্চ | উচ্চ | ছোট লিস্টের জন্য মাত্র |
* প্রতিটি সংযোজনে নতুন লিস্ট তৈরি হয়, তাই বড় লিস্টের জন্য খুব ধীর।
সেরা অনুশীলন
- সাধারণ কেসে:
[item for sublist in lst for item in sublist] - বড় ডেটা/স্ট্রিমিং:
itertools.chain.from_iterable - গভীর নেস্টিং (irregular depth): রিকারসিভ ফাংশন বা
more_itertools.collapse