简体   繁体   中英

IndexError: Creating two lists from a text file

I cannot figure why when I run my code I get an IndexError saying my list is out of range. I run into the error at “ if x[1] == "strongly agree": “. I've went through my code many times and I don't know how to fix..

Here is my code(not including import):

firstList = [0, 0, 0, 0, 0]
secondList = [0, 0, 0, 0, 0]

with open("surveyData.txt", 'r') as f:
answers = f.read().split('\n')
    
for x in answers:
x = x.split(',')
    
    if x[0] == "very happy":
       firstList[0] += 1
    elif x[0] == "happy":
       firstList[1] += 1
    elif x[0] == "neutral":
       firstList[2] += 1
    elif x[0] == "unhappy":
       firstList[3] += 1
    else:
       firstList[4] += 1 
    
    if x[1] == "strongly agree":
       secondList[0] += 1
    elif x[1] == "agree":
       secondList[1] += 1
    elif x[1] == "neutral":
       secondList[2] += 1
    elif x[1] == "disagree":
       secondList[3] += 1
    else:
       secondList[4] += 1

def showHistogram(dataList, bars):
plt.bars(bars, dataList)
plt.show()

question1_freq = ['very happy', ' happy', 'neutral', 'unhappy', 'very unhappy']
showHistogram(firstList, question1_freq)

question2_freq = ['strongly agree', 'agree', 'neutral', 'disagree', 'strongly disagree']
showHistogram(secondList, question2_freq)

Sample text file: unhappy,strongly agree

very unhappy,strongly agree

happy,agree

neutral,strongly agree

happy,agree

very unhappy,strongly agree

neutral,strongly agree

very happy,disagree

Just change the below line and rest seems ok

answers = f.read().splitlines()

Take a look at your file data. Make sure your code is doing what you expect it to do. If x[1] does not exist/list ends at x[0], you'd get an index error (basically you are trying to manipulate something that doesn't exist)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM