2017-03-12 4 views
-3

Ich habe einen Code und müssen die Zeile für Zeile Bedeutung dieses Python-Codes erhalten.Python Code Zeile für Zeile Bedeutung

marksheet = [] 
for i in range(0,int(input())): 
    marksheet.append([raw_input(), float(input())]) 

second_highest = sorted(list(set([marks for name, marks in marksheet])))[1] 
print('\n'.join([a for a,b in sorted(marksheet) if b == second_highest])) 
+5

Geben Sie Ihr Bestes und sagen Sie uns, was Sie denken, dass es bedeutet. Wir sind nicht hier, um deine Hausaufgaben für dich zu machen. –

+3

'second_highest' ist eigentlich' second_lowest'. – Daniel

Antwort

2

empfehle ich Ihnen durch die python tutorial

Nur für Ihr Verständnis dieses Codes zu gehen, habe ich die Kommentare hinzugefügt.

#initialising an empty list! 
marksheet = [] 

#iterating through a for loop starting from zero, to some user input(default type string) - that is converted to int 
for i in range(0,int(input())): 
    #appending user input(some string) and another user input(a float value) as a list to marksheet 
    marksheet.append([raw_input(), float(input())]) 

#[marks for name, marks in marksheet] - get all marks from list 
#set([marks for name, marks in marksheet]) - getting unique marks 
#list(set([marks for name, marks in marksheet])) - converting it back to list 
#sorting the result in decending order with reverse=True and getting the value as first index which would be the second largest. 
second_highest = sorted(list(set([marks for name, marks in marksheet])),reverse=True)[1] 

#printing the name and mark of student that has the second largest mark by iterating through the sorted list. 
#If the condition matches, the result list is appended to tuple -`[a for a,b in sorted(marksheet) if b == second_highest])` 
#now join the list with \n - newline to print name and mark of student with second largest mark 
print('\n'.join([a for a,b in sorted(marksheet) if b == second_highest])) 

Hoffe es hilft!

+0

vielen dank nur die vorletzte linie war ein problem, ich habe es dank nochmal verstanden –

2

täte dies in einem Kommentar, aber ich habe nicht 50 Ruf noch:

Sie brauchen nicht auf second_highest sortiert zu verwenden, aber anscheinend ist es nicht eine gute Gewohnheit auf diesem so verlassen Sie können das sortiert halten. Ein Aufruf nach einer bereits sortierten Liste verbraucht sowieso nicht viele Ressourcen.

second_highest = sorted(list(set([marks for name, marks in marksheet])))[1] 

Auch wenn die Liste enthält so etwas wie [1,3,2,5,3,2,1] wird es 2 als Ergebnis geben und nicht mehr als 1, da ein Satz alle Duplikate entfernt.

Wenn Sie Duplikate behalten möchten verwenden:

second_highest = sorted([marks for name, marks in marksheet]))[1] 
+1

_ "Sie müssen nicht sortiert an second_highest verwenden, da es zuerst in einer Menge konvertiert und eine Menge immer sortiert wird" _ Das ist einfach nicht wahr. Sätze sind unsortiert nach Definition und [Dokumentation] (https://docs.python.org/2/library/stdtypes.html#set-types-set-frozenset). Du hast recht, dass Dinge wie 'list ({3,2,1})' auf Grund der Implementierung von Sets zu '[1,2,3]' führen, aber darauf solltest du dich nicht verlassen . Sie sollten _definitely_ explizit die Liste sortieren. –

Verwandte Themen