दोनों सूची और islice ऑब्जेक्ट्स पुन: प्रयोज्य हैं लेकिन परिणाम में यह अंतर क्यों है।itertools लाइब्रेरी से tee function
r = [1, 2, 3, 4]
i1, i2 = tee(r)
print [e for e in r if e < 3]
print [e for e in i2]
#[1, 2]
#[1, 2, 3, 4]
r = islice(count(), 1, 5)
i1, i2 = tee(r)
print [e for e in r if e < 3]
print [e for e in i2]
#[1, 2]
#[]
लेकिन सूची वस्तु और islice वस्तु समान व्यवहार करने की जरूरत है, है ना? – John
@ जॉन नंबर, जब आप सूची में लूप करते हैं, तो आपको हर बार एक नया इटरेटर मिल जाता है, जिसका अर्थ है कि आपको अभी भी मान मिलते हैं। जब आप 'इस्लिस()' का उपयोग करते हैं तो आपको जनरेटर मिलता है, जो एक बार मूल्यों का उत्पादन करेगा, और फिर समाप्त हो जाएगा। इसे स्वयं आज़माएं - बस दो बार सूची में लूप करें, फिर उस पर एक आईलिस और लूप लें - व्यवहार में अंतर देखें। –
@ जॉन दो उदाहरणों को समान रूप से व्यवहार करने के लिए, 'r = [1,2,3,4]' के बजाय 'r = iter ([1,2,3,4]) 'का उपयोग करें। – clacke