python - যবহ - পাইথনের জেনারেটর বা তালিকা থেকে প্রথম এন আইটেমগুলি কীভাবে নেওয়া যায়?



সহজ ভাষায় পাইথন ৩ pdf download (6)

একটি তালিকা slicing

top5 = array[:5]
  • একটি তালিকা টালি করতে, একটি সহজ সিনট্যাক্স আছে: array[start:stop:step]
  • আপনি কোন পরামিতি বাদ দিতে পারেন। এই সমস্ত বৈধ: array[start:] , array[:stop] , array[::step]

একটি জেনারেটর slicing

 import itertools
 top5 = itertools.islice(my_list, 5) # grab the first five elements
  • আপনি পাইথন সরাসরি একটি জেনারেটর টুকরা করতে পারবেন না। itertools.islice() একটি নতুন slicing জেনারেটর সিনট্যাক্স itertools.islice(generator, start, stop, step) ব্যবহার করে একটি বস্তু মোড়ানো হবে itertools.islice(generator, start, stop, step)

  • মনে রাখবেন, একটি জেনারেটর slicing এটি আংশিকভাবে নিষ্কাশন করা হবে। আপনি যদি পুরো জেনারেটরের অক্ষরটি অক্ষত রাখতে চান তবে সম্ভবত এটি একটি টুপলে বা তালিকায় পরিণত করুন, যেমন: result = tuple(generator)

https://src-bin.com

এই প্রশ্নটি ইতিমধ্যে একটি উত্তর আছে:

linq আমি চাই

var top5 = array.Take(5);

কিভাবে Python সঙ্গে এই কাজ করবেন?


Answer #1

@ শাইকভস্কির উত্তর চমৎকার ( ... এবং আমি এই উত্তরটি পোস্ট করার পরে ব্যাপকভাবে সম্পাদনা করেছি ), তবে আমি কয়েকটি পয়েন্ট ব্যাখ্যা করতে চেয়েছিলাম।

[next(generator) for _ in range(n)]

এটি সবচেয়ে সাধারণ পদ্ধতি, তবে জেনারেটরটি যদি StopIteration ক্লান্ত হয় তবে StopIteration ছুড়ে ফেলে।

অন্য দিকে, নিম্নোক্ত পদ্ধতিগুলি n আইটেমগুলিতে ফিরে আসে যা বেশিরভাগ ক্ষেত্রেই যুক্তিযুক্ত বলে মনে হয়:

তালিকা: [x for _, x in zip(range(n), records)]

জেনারেটর: (x for _, x in zip(range(n), records))


Answer #2

আমার স্বাদে, পাইপন 3 এ 'xrange (n)' (অথবা 'range (n)' এর সাথে 'zip ()' একত্রিত করার জন্য এটি খুব সংক্ষিপ্ত, যা জেনারেটরগুলিতেও ভাল কাজ করে এবং এতে পরিবর্তনগুলির জন্য আরও বেশি নমনীয় বলে মনে হয় সাধারণ.

# Option #1: taking the first n elements as a list
[x for _, x in zip(xrange(n), generator)]

# Option #2, using 'next()' and taking care for 'StopIteration'
[next(generator) for _ in xrange(n)]

# Option #3: taking the first n elements as a new generator
(x for _, x in zip(xrange(n), generator))

# Option #4: yielding them by simply preparing a function
# (but take care for 'StopIteration')
def top_n(n, generator):
    for _ in xrange(n): yield next(generator)

Answer #3

এই কাজ করা উচিত

top5 = array[:5] 

Answer #4

itertools আপনি অন্য জেনারেটর অবজেক্টটি পাবেন, তাই বেশিরভাগ ক্ষেত্রেই আপনাকে প্রথম এন উপাদানগুলি ( N ) নিতে অন্য পদক্ষেপের প্রয়োজন হবে। একটি generator থেকে উপাদানগুলি প্রস্তুত করার জন্য কমপক্ষে দুটি সরল সমাধান (কার্য সম্পাদনের ক্ষেত্রে সামান্য কম কার্যকর কিন্তু খুব সহজ) রয়েছে:

তালিকা বোঝার ব্যবহার করে:

first_N_element=[generator.next() for i in range(N)]

অন্যথায়:

first_N_element=list(generator)[:N]

যেখানে N আপনি নিতে চান উপাদান সংখ্যা (উদাহরণস্বরূপ প্রথম পাঁচটি উপাদান জন্য এন = 5)।


Answer #5
import itertools

top5 = itertools.islice(array, 5)




generator