even_numbers = [0] * 5

for i in range(1,11):
    if i%2 ==0:
        even_numbers[i]=i

मुझे त्रुटि मिल रही है 'सूची असाइनमेंट इंडेक्स सीमा से बाहर', हालांकि मुझे पूरा यकीन नहीं है कि इसका क्या अर्थ है।

-5
Charles Valencia Evans 26 जिंदा 2020, 18:09
3
5 सम संख्याओं की सूची क्यों नहीं बनाते?
 – 
Sociopath
26 जिंदा 2020, 18:10
असाइनमेंट से पहले print(i) कोशिश करें। आप देखेंगे कि i 4 . से बड़ा हो जाता है
 – 
DeepSpace
26 जिंदा 2020, 18:11
लूप के लिए मैं 1 से 10 तक जाता हूं, लेकिन आपकी सम_नंबर सूची आकार 5 की है, इसलिए इसे केवल 0 से 4 तक अनुक्रमित किया जा सकता है। ठीक करने के लिए: even_numbers = [] के साथ सम_संख्याएं डालें। फिर अपने लूप में even_numbers.append(i) वैकल्पिक रूप से एक सूची समझ का उपयोग करें even_numbers = [i for i in range(1, 11) if i%2 == 0]
 – 
DarrylG
26 जिंदा 2020, 18:11
range सीधे सम संख्याएँ उत्पन्न कर सकते हैं: range(1, 11, 2)। केवल उन्हें तुरंत अस्वीकार करने के लिए विषम संख्याएँ उत्पन्न करने की आवश्यकता नहीं है।
 – 
chepner
26 जिंदा 2020, 18:31

3 जवाब

संदेश का अर्थ है कि आप सूची के उस तत्व तक पहुँचने का प्रयास कर रहे हैं जो मौजूद नहीं है।

सूची में केवल 0 से 4 के सूचकांक वाले पांच तत्व हैं। सम_नंबरों को एक मान निर्दिष्ट करने का प्रयास करते हुए [i], आप सूची के सभी तत्वों को 1 से 10 की सीमा में एक मान निर्दिष्ट करने का प्रयास करेंगे। इसलिए आपको बदलना चाहिए सम_संख्याओं का अनुक्रमण [i/2]

0
fischmalte 26 जिंदा 2020, 18:15

"सूची सूची सीमा से बाहर" मूल रूप से इसका मतलब है कि आप एक सरणी अनुक्रमणिका तक पहुंचने का प्रयास कर रहे हैं जो मौजूद नहीं है।

आपके कोड में, आपका लूप 10 तक जाता है, और आप even_numbers[10] को एक संख्या निर्दिष्ट करने का प्रयास कर रहे हैं, जबकि आपके सरणी में केवल 5 तत्व हैं। मूल रूप से आप अपने कार्यक्रम को बता रहे हैं "मुझे इस 5-तत्व सूची का 10 वां तत्व दें", जिसका कोई मतलब नहीं है। इस मामले में आपके सूचकांक केवल 0 से 4 तक जाते हैं।

अपनी समस्या को ठीक करने के लिए, वर्तमान अनुक्रमणिका को एक चर में संग्रहीत करने का प्रयास करें:

even_numbers = [0] * 5
current_index = 0

for i in range(1,11):
    if i%2 ==0:
        even_numbers[current_index]=i
        current_index += 1

संपादित करें: वैकल्पिक रूप से, range() फ़ंक्शन के step तर्क का उपयोग करके, केवल तत्वों के माध्यम से लूप क्यों नहीं?

even_numbers = [0] * 5
current_index = 0

#will increment 'i' 2 by 2, i.e. i will be 2, then 4, then 6, ...
for i in range(2,11, 2): 
    even_numbers[i/2]=i
    current_index += 1
1
Anis R. 26 जिंदा 2020, 18:24

सबसे सरल उपाय यह है कि सबसे पहले सम संख्याओं की सूची बनाई जाए।

even_numbers = list(range(1,11,2))

यदि, किसी कारण से, आपके पास पहले से ही सूची है, तो इससे कोई फर्क नहीं पड़ता कि मूल सामग्री क्या है यदि आप उन्हें बदलने जा रहे हैं।

for i, _ in enumerate(even_numbers):
    even_numbers[i] = 2*i

या सिर्फ even_numbers[:] = range(1, 11, 2)

0
chepner 26 जिंदा 2020, 19:06