मैं अक्सर अपने आप को तैयार करने जैसा:अगर मैं अतिरिक्त मूल्य पर पुन: प्रयास करना चाहता हूं तो पुनरावृत्ति के दौरान एक सूची में शामिल होना सुरक्षित है? कोड
mylist = [247]
while mylist:
nextlist = []
for element in mylist:
print element
if element%2==0:
nextlist.append(element/2)
elif element !=1:
nextlist.append(3*element+1)
mylist = nextlist
ठीक है - यह आम तौर पर इस सरल नहीं है [और आमतौर पर यह वास्तव में बड़ी सूचियों वाले है, मैं सिर्फ यह मनोरंजन के लिए (xkcd देखें) चुना है], लेकिन मैं एक बनाने सूची, उन तत्वों के साथ चीजों को करने पर इसे फिर से शुरू करें। ऐसा करने के दौरान, मैं नई चीजों की खोज करूंगा जिन्हें मुझे फिर से शुरू करने की आवश्यकता होगी, और मैंने उन्हें एक नई सूची में रखा जो मैं फिर से शुरू करता हूं।
यह लिखने के लिए संभव हो गया लगता है:
mylist=[247]
for element in mylist:
print element
if element%2 == 0:
mylist.append(element/2)
elif element !=1:
mylist.append(element*3+1)
मुझे पता है कि यह इस पर पुनरावृत्ति करते हुए एक सूची को संशोधित करने के लिए खतरनाक माना जाता है, लेकिन इस मामले में मैं नए तत्व से अधिक पुनरावृति करना चाहते हैं।
क्या ऐसा करने से कोई खतरा है? केवल एक ही मैं सोच सकता हूं कि सूची बढ़ सकती है और बहुत सारी मेमोरी ले सकती है (मेरे कई मामलों में मैं वास्तव में अंत में पूरी सूची रखना चाहता हूं)। क्या मैं दूसरों को अनदेखा कर रहा हूं?
कृपया ध्यान दें: Python: Adding element to list while iterating संबंधित है, लेकिन सूची की एक प्रति बनाने के तरीके बताते हैं ताकि हम मूल पर पुनरावृत्ति से बच सकें। मैं इस बारे में पूछ रहा हूं कि मेरे विशिष्ट मामले में कुछ भी गलत है, जहां मैं वास्तव में अपने पुनरावृत्ति को विस्तारित करना चाहता हूं।
संपादित: यहाँ वास्तविक समस्या के करीब कुछ है। मान लें कि हम नेटवर्क के "के-कोर" उत्पन्न करना चाहते हैं। यही है, के साथ कम डिग्री के साथ सभी नोड्स हटा दें। शेष नेटवर्क से के साथ कम डिग्री के साथ सभी नोड्स हटा दें। हटाए जाने के लिए कोई भी नहीं छोड़ा जब तक दोहराएं। एल्गोरिदम को शुरू करने के लिए के नोड्स से कम सभी मिलेंगे, उन्हें एक to_delete सूची में डाल दें। फिर जैसे नोड्स हटा दिए जाते हैं, यदि पड़ोसी की डिग्री के -1 हो जाती है, तो इसे सूची में जोड़ें। यह द्वारा किया जा सकता है:
delete_list = [node for node in G.nodes() if G.degree(node)<k]
for node in delete_list:
nbrs = G.neighbors(node)
for nbr in nbrs:
if G.degree(nbr)==k:
delete_list.append(nbr)
G.remove_node(node)
धन्यवाद। मैं अपने वास्तविक समस्या की तरह कुछ और दिखाने के लिए अपने प्रश्न को संपादित कर रहा हूं - इसे मेरे लिए एक सूची होने की आवश्यकता है। – Joel