Typeerror: List Indices Must Be Integers Or Slices, Not Tuple While Doing Some Calculation In A Nested List
Solution 1:
The wrong part in your code is for element in enumerate(students_pclist)
inside your list comprehension: enumerate() returns a tuple on each iteration loop. So you should have written something like for element,i in enumerate(students_pclist)
.
It fixes your error, but it does not give you the expected answer.
Here is a suggestion of complete fix, based on your code:
myListOfLists = [['Amy',2,3,4], ['Jack',3,4,None]]
def compute_mean_pc():
students_pclist=[['Amy',2,3,4],['Jack',3,4,None]]
mean_pc=[ [countMean(student[1:])] +[student[0]] for student in students_pclist]
print(mean_pc)
def countMean(array):
count=0
sumup=0for i in range(len(array)):
if array[i]!=None:
count+=1
sumup+=array[i]
mean=sumup/count
return mean
compute_mean_pc()
# [[3.0, 'Amy'], [3.5, 'Jack']]
And finally I suggest you a code which is more efficient and still readable, using a good old-fashioned for loop:
myList = [['Amy',2,3,4], ['Jack',3,4,None]]
def compute_mean_pc(myList):
result= []
for name, *valuesin myList: # iterate overeach sub-list getting name and next valuesvalues= list(filter(None,values)) # Remove any'None'from the values
result.append([name, sum(values)/len(values)]) # Append a list [name,mean(values)] to the result list
returnresultresult= compute_mean_pc(myList)
print(result) # [['Amy', 3.0], ['Jack', 3.5]]
Solution 2:
for element in enumerate(students_pclist)
will assign a tuple (index, element_of_students_pclist)
to element
.
What you want is:
[[countMean(element[1:]), element[0]]for element in students_pclist]
Solution 3:
You had problems with correctly using index returned by the enumerate
. I just slightly modified your code with the correct way of using enumerate
def compute_mean_pc():
students_pclist=[['Amy',2,3,4],['Jack',3,4,None]]
mean_pc=[[ countMean(students_pclist[i][1:]) ] + [element[0]]for i, element in enumerate(students_pclist)]
print(mean_pc)
Output
[[3.0, 'Amy'], [3.5, 'Jack']]
Solution 4:
This one should do what you need:
a = [['Amy',2,3,4],['Jack',3,4,None]]
def computeMean(array):
valid = [i for i in array[1:] if i]
return [sum(valid)/len(valid)]
result = [computeMean(sub) + sub[:1] forsubin a]
result
#[[3.0, 'Amy'], [3.5, 'Jack']]
Solution 5:
You can use below function to count mean:
defcompute_mean_pc():
students_pclist=[['Amy',2,3,4],['Jack',3,4,None]]
mean_pc=[ [student[0], count_mean(student)] for student in students_pclist]
print(mean_pc)
defcount_mean(array):
grades = [el for el in array ifisinstance(el, int)]
returnsum(grades) / len(grades)
compute_mean_pc()
Post a Comment for "Typeerror: List Indices Must Be Integers Or Slices, Not Tuple While Doing Some Calculation In A Nested List"