0
Nested list
Trying to solve a challenge where I make a nested list giving the second highest score. Input should be a name and a float. Keeps giving me an error message, but I cannot understand what's wrong. Any help appreciated:). marksheet = [] for _ in range(0,int(input())): marksheet.append([input(), float(input())]) second_highest = sorted(list(set([marks for name, marks in marksheet]))) print('\n'.join([a for a,b in sorted(marksheet) if b == second_highest]))
7 Answers
+ 1
This fixes your code, just keep in mind that you need at least two marks so it doesn't throw an index error.
second_highest = sorted(list(set([marks for name, marks in marksheet])))[-2]
+ 1
1. Inputs should be written in separate lines.
alice
9.42
bob
9.14
2. The sorted() functions returns a new sorted list of the items of the argument.
https://docs.python.org/3/library/functions.html#sorted
3. In your code, you assign an ascending sorted list to "second_highest".
For example:
print(second_highest)
# [7.00, 8.00, 9.00, 10.00]
The element in the (-1) position, the last element, is the greatest number.
The element in the (-2) position, the second to last element, is the second greatest number.
Doing "sorted(list(...))[-2]" assigns the element in the (-2) position, not the whole list, to "second highest".
+ 1
Thanks, Diego! I'll re-work that section nowđđ»
+ 1
Try this as input (in separate lines).
3
alice
9.42
bob
9.12
charlie
9.56
0
Thanks Diego.
So youre defining "second highest" and saying it's equal to a sorted list, with two cariables (names and marks)? Is that correct?
If so, what does the -2 do?
Also, could you explain how the "sorted" command works (looked in the Python lessons but couldnt find it)?
Thanks again Diego and appreciate your help (as always:)).
0
Tried the code again (with fix): got the following error message. Any help appreciated (code abd error message below):
marksheet = []
for _ in range(0,int(input())):
marksheet.append([input(), float(input())])
second_highest = sorted(list(set([marks for name, marks in marksheet])))[-2]
Traceback (most recent call last):
File "..\Playground\", line 2, in <module>
for _ in range(0,int(input())):
ValueError: invalid literal for int() with base 10: 'dad,2.00'
0
Still getting the same error message:(. I entered on two separare lines and tried reversing the input (entering the numbers first)? Any other suggestions?
Traceback (most recent call last):
File "..\Playground\", line 2, in <module>
for _ in range(0,int(input())):
ValueError: invalid literal for int() with base 10: 'bob'