res = [3, 1, 1, 5, 2, 4, 2, 4, 2, 4, 3, 1, 1, 5, 3]      

   while not i>(len(res)-1):
        if res[i]==res[i+1]:
            answer+=2
            i+=2
        else:
            i+=1

चर "उत्तर" को एक दूसरे के बगल में रखी गई डुप्लिकेट संख्याओं को गिनना माना जाता है। किसी कारण से, मुझे यह कहते हुए त्रुटि मिलती है कि IndexError: सूची अनुक्रमणिका सीमा से बाहर है। मैं यह कैसे तय करुं?

3
Sung Yeon Park 20 जुलाई 2020, 07:26

3 जवाब

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

आइए कोड को थोड़ा सरल करके शुरू करें। शर्त

not i > (len(res) - 1)

में परिवर्तित किया जा सकता है

i <= (len(res) - 1)

जिसे आगे में परिवर्तित किया जा सकता है

i < len(res)

इसका मतलब यह है कि i हमेशा res की लंबाई से कम होगा, जो इसे एक वैध इंडेक्स बनाता है। हालांकि, इस लाइन पर while के मुख्य भाग के भीतर:

if res[i]==res[i+1]:
    ...

हमने res को i + 1 के साथ अनुक्रमित किया, जो कि i के अंतिम संभावित मान के लिए एक अमान्य अनुक्रमणिका होगी (i + 1 len(res) के बराबर होगी)। हमें यह सुनिश्चित करना होगा कि न केवल i, len(res) से कम है, बल्कि यह भी है कि i + 1, len(res) से कम है, हमें यह निश्चित संस्करण प्रदान करता है कोड का:

while i + 1 < len(res):
    if res[i] == res[i + 1]:
        answer += 2
        i += 2
    else:
        i += 1

इस कोड को आपके उदाहरण पर चलाने पर res एक answer 4 देता है, जो सही दिखता है।

4
Mario Ishac 20 जुलाई 2020, 07:52

इसे यह दृष्टिकोण देने के बारे में कैसे?

res = [3, 1, 1, 5, 2, 4, 2, 4, 2, 4, 3, 1, 1, 5, 3]
answer = 0
start = 0
while start < len(res):
    if start + 1 < len(res):
        if res[start] == res[start + 1]:
            answer += 1
            start += 2
        else:
            start += 1
    else:
        start += 1
print(answer)
1
Albert Alberto 20 जुलाई 2020, 08:11

यदि आप अतिव्यापी जोड़े को भी गिनना चाहते हैं, तो आप इस दृष्टिकोण का उपयोग कर सकते हैं:

res = [3, 1, 1, 5, 2, 4, 2, 4, 2, 4, 3, 1, 1, 5, 3]
for i, j in zip(res, res[1:]):
    if i == j:
        amount += 2

एक और दृष्टिकोण हो सकता है:

for i, _ in enumerate(res):
    if i < len(res) - 1 and res[i] == res[i+1]:
        amount += 2
1
Eliran Turgeman 20 जुलाई 2020, 08:25