2016-12-16 8 views
-1

リストのリストを繰り返し処理し、各サブリストの最小値を削除しようとしています。 min()BIFを使用すると、文字列と整数の値を比較しているため、TypeErrorが生成されます。この比較を避け、サブリストの最小値を見つけるにはどうすればよいですか?整数と文字列を含むサブリストの最小値の検索

studentList = [['A', 2, 5, 7], ['B', 6, 2, 9], ['C', 5, 3, 9]] 
for student in studentList: 
    student.remove(min(student)) 
print(studentList) 
+0

文字列と数字の両方がある場合、どのように最小値を定義しますか?リスト内の文字列にラベルが表示されていますか?その場合、 'dict'を使うことを検討してください。 –

+1

最小値はどう思いますか?最初の要素(つまり、「min(student [1:])」)のみを除外したいのですか? – jonrsharpe

+0

'A'は2より大きいか小さいですか?最初のサブリストの – OdraEncoded

答えて

0

生徒名は「A」と略す、およびそれに続く 整数でマークされている、私は、あなたのケースでは、あなたの最低マーク(整数)

を削除したいと言うことができます

studentList = [['A', 2, 5, 7], ['B', 6, 2, 9], ['C', 5, 3, 9]] 
for student in studentList: 
    student.remove(min(student[1:])) 

print(studentList) 

出力:

- 各サブリストの最初の項目をスキップする必要があり、残りの配列から最小値を取得します
[['A', 5, 7], ['B', 6, 9], ['C', 5, 9]] 
0

サブリストの最初の値がラベルを表す場合、データはdictとして保存する方がはるかに意味があります。この方法では、処理するときにラベルを無視するための余分な処理を行う必要はありません番号:

studentList = [['A', 2, 5, 7], ['B', 6, 2, 9], ['C', 5, 3, 9]] 
#use the first value in the list as the 'key' and use the rest of the values as the 'value' 
studentMarks = {student[0]:student[1:] for student in studentList} 

for marks in studentMarks.values(): 
    marks.remove(min(marks)) 

>>> studentMarks 
{'B': [6, 9], 'C': [5, 9], 'A': [5, 7]} 

このデータ構造は、今studentMarks['A']が学生AstudentMarks.keys()ためのマークはあなたにすべての生徒の名前とすべてのマークリストのstudentMarks.values()リストのリストを与えるあなたが得られますので、より有用である可能性があります。

関連する問題