ध्यान के माध्यम से इस बारे में सोच करने के बाद, मुझे लगता है कि यह सबसे अच्छा तरीका है। यह आपको break
का उपयोग किये बिना आसानी से बीच में उतरने देता है, जो मुझे लगता है कि महत्वपूर्ण है, और इसे न्यूनतम गणना की आवश्यकता है, इसलिए मुझे लगता है कि यह सबसे तेज़ है। यह भी आवश्यक नहीं है कि li
एक सूची या टुपल हो। यह कोई इटरेटर हो सकता है।
from itertools import cycle
li = [0, 1, 2, 3]
running = True
licycle = cycle(li)
# Prime the pump
nextelem = next(licycle)
while running:
thiselem, nextelem = nextelem, next(licycle)
मैं भावी पीढ़ी के लिए यहाँ अन्य समाधान जा रहा हूँ।
उस फैंसी इटरेटर सामान की सभी जगहें हैं, लेकिन यहां नहीं। % ऑपरेटर का प्रयोग करें।
li = [0, 1, 2, 3]
running = True
while running:
for idx, elem in enumerate(li):
thiselem = elem
nextelem = li[(idx + 1) % len(li)]
अब, अगर आप एक सूची के माध्यम से चक्र असीम करने का इरादा है, तो बस ऐसा करते हैं:
li = [0, 1, 2, 3]
running = True
idx = 0
while running:
thiselem = li[idx]
idx = (idx + 1) % len(li)
nextelem = li[idx]
मुझे लगता है कि अन्य tee
से जुड़े समाधान की तुलना में समझने के लिए आसान है, और शायद इसकी गति और भी। यदि आप सुनिश्चित हैं कि सूची आकार में नहीं बदलेगी, तो आप len(li)
की एक प्रति को गिलहरी कर सकते हैं और इसका उपयोग कर सकते हैं।
यह आपको बाल्टी को फिर से नीचे आने के लिए इंतजार करने के बजाय बीच में फेरिस व्हील को आसानी से बंद करने देता है। अन्य समाधान (आपके सहित) की आवश्यकता है कि आप running
for
लूप के बीच में और फिर break
देखें।
जबकि पाश बाहर छोड़ने पर विचार देता है। यह सवाल के लिए अप्रासंगिक लगता है। यदि यह प्रासंगिक है, तो क्यों समझाओ। –
मैं अनिश्चित काल तक एक सूची के माध्यम से चक्र बनाना चाहता हूं, इसलिए समय/लूप संयोजन के लिए। क्षमा करें, उसको समझाया नहीं। –
मुझे लगता है कि आप आदर्श रूप से अंत में बजाय चक्र के बीच में रुकने में सक्षम होना चाहते हैं? – Omnifarious