2017-03-12 8 views
-3

私はコードを持っており、このPythonコードの行ごとの意味を取得する必要があります。Pythonコード行ごとの意味

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

あなたのベストショットを出して、あなたが何を意味するかを教えてください。私たちはあなたの宿題をするためにここにいるわけではありません。 –

+3

'second_highest'は実際には' second_lowest'です。 – Daniel

答えて

2

、私がコメントを追加しました。

#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])) 

希望します。

+0

2番目の最後の行だけが問題だったことに感謝します。もう一度感謝しました。 –

2

はコメントでこれを行うだろうが、私はまだ50評判を持っていない:あなたはsecond_highestにソートを使用する必要はありません

をどうやらとてもこれに頼るのは良い習慣ではありませんあなたはソートされたままにすることができます。すでにソートされたリストでソートされたコールは、とにかく多くのリソースを使用しません。

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

リストはセットは、すべての重複を削除するので、それは結果ではなく1と2を与える[1,3,2,5,3,2,1]のようなものが含まれている場合。

使用重複を維持したい場合:私は非常にあなたがちょうどこのコードのご理解python tutorial

を通過することをお勧めします

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

_ "あなたはsecond_highestでソートを使う必要はありません。なぜなら、最初にセットを変換して、セットが常にソートされるからです。" _これは単に真実ではありません。セットは定義ごとにソートされていません。[documentation](https://docs.python.org/2/library/stdtypes.html#set-types-set-frozenset)。あなたはセットがどのように実装されているかのために、 'list({3,2,1})'のようなものは '[1,2,3]'になりますが、それはあなたが頼りにするものではありません。 _definitely_明示的にリストをソートする必要があります。 –

関連する問題