my_list = [1,2,3]

def my_gen():
    yield 4
    yield 5
    yield 6

for i in my_list:
  print(i) # 1,2,3

for i in my_gen():
  print(i) # 4,5,6

अगले चक्र को कैसे लागू करें? मुझे प्राप्त होने की उम्मीद है: 1,2,3,4,5,6

for i in [my_list, my_gen()]:
  print(i) # 1, 2, 3 <generator object my_gen...> -> 1,2,3,4,5,6
-1
Oleg Dats 31 अगस्त 2020, 14:51

4 जवाब

सबसे बढ़िया उत्तर

इस उद्देश्य के लिए एक सहायक है: itertools.chain

for i in itertools.chain(my_list, my_gen()):
    print(i)

नोट: मानचित्रों तक पहुंच एकत्र करने के लिए एक समान कार्य भी है (dicts, ...) ChainMap

1
VPfB 31 अगस्त 2020, 14:57

एक बहुत ही अज्ञात कार्यक्षमता सिंटैक्स yield from है, जो किसी अन्य जनरेटर को तत्व को उत्पन्न करने की अनुमति देता है। यह my_gen को सूची में परिवर्तित नहीं करने का लाभ है। उदाहरण के लिए:

my_list = [1, 2, 3]

def my_gen():
    yield 4
    yield 5
    yield 6

def my_final_gen():
    yield from my_list
    yield from my_gen()

for x in my_final_gen():
    print(x)
0
g2i 31 अगस्त 2020, 15:08
for i in zip(my_list, my_gen()):
  print(*i)

सच कहूं तो मुझे आपका सवाल समझ में नहीं आया। कृपया अपने आप को बेहतर समझाएं।

संपादित करें: * उस टपल को अनपैक करना है जिसे zip() फ़ंक्शन ने बनाया है।

0
Anthon Naivelt 31 अगस्त 2020, 14:57

यदि आप वही आउटपुट चाहते हैं, तो आप जनरेटर को एक सूची में बदल सकते हैं।

हालांकि यह पर्याप्त नहीं होगा, क्योंकि आप सूची को ही प्रिंट करेंगे, अंदर के मूल्यों को नहीं।

आपको सूचियों को अनपैक करने और लूप के लिए इसका उपयोग करने की आवश्यकता है।

my_list = [1,2,3]

def my_gen():
    yield 4
    yield 5
    yield 6

for i in [*my_list, *list(my_gen())]:
  print(i)
1
ChatterOne 31 अगस्त 2020, 14:58