2016-05-19 101 views
1

我如何才能找到給定的鍛鍊次數的最低值?我有這樣的代碼:查找最大和矩陣最小值,巨蟒

mat = [] 
calificaciones = [] 
#Captures student ID 
def lmat (numeroest): 
    mattotal = [] 
    for i in range (0, numeroest): 
     matricula = int(raw_input('Student ID : ')) 
     mattotal.append (matricula) 
    return (mattotal) 


#Captures grades 
def numest (numeroest): 
    mattotal = [] 
    calif = [] 
    for i in range (0, numeroest): 
     numcal = input ('Introduce the ammount of grades: ') 
     for j in range (0, numcal): 
      matricula = int(input('Input the grades: ')) 
      calif.append (matricula) 
     mattotal.append (calif) 
    return (mattotal) 

因此,如果用戶輸入鍛鍊的數量它將輸出的最低等級表示的運動(例如,鍛鍊2,這意味着這將是最低的)

def givelowest(): 
row = input ('Enter the number of the exercise: ') 
    for ... 

我想打一個for循環,查找該行(鍛鍊的次數,則給出在所述排中最低的數字

+1

你是什麼意思與「呼2」? – Keiwan

+0

你使用哪種數據結構? – polku

+0

「2」是否指_column_ 2? – TigerhawkT3

回答

0

我想我知道你想做什麼。基本上你只是想輸入一個列號並在該列中拉出最低值。

對於使用矩陣P(可能是等級)功能「FUB」和用戶輸入的「演習」

p = ([[9,2,8],[4,6,8],[3,1,2]]) #is this your grades? 

def fub(i): 
    return min(x[i-1] for x in p) 

exercises = input('gimme: ') 
>gimme: 2 #enter an integer for the column you wish to return min for 

fub(exercises) 
> 1 #! 

基本上什麼是您創建一個矩陣這裏發生的一切。一個元組列表,所有長度都相同,在這種情況下,可以更改爲等級。要查看給定的行,請選擇p [某個數字],p [1]給出第二列[4,6,8]。記住python中的列表從0開始,所以第二項是[1]。選擇行中第二項使用p [1] [1],在這種情況下爲6.

然後生成一個函數。該功能不起任何作用。它只是一個你稍後會用到的工具。

該函數需要一個值。你可以隨便給它,試試fub(2)。它在做什麼以獲取每個列表並查看每行的用戶確定列。所以fub(2)查看每行的第二列並將這些值添加到列表中。它需要這個返回它的最小值。

+1

或只是'return min(x [i - 1] for p in p)' –

+0

它告訴我我沒有定義, –

+1

@IsaacLo,'i'來自函數定義'def fub(i):' –

1

獲取某列的min/max可以使用與operator.itemgetter功能:

from operator import itemgetter 

def min_or_max(m, col, f): 
    return f(map(itemgetter(col), m)) 

然後把它傳遞矩陣,哪一列和FUNC使用即最小或最大:

In [22]: m = [[9, 2, 8],[4,6,8], [3, 1, 2]] 

In [23]: func(m, 2, max) 
Out[23]: 8 

In [24]: func(m, 2, min) 
Out[24]: 2 

或者在創EXP使用索引:

def func(m, col, f): 
    return f(row[col] for row in m) 

如果你在一個迭代希望兩個:

from operator import itemgetter 


def func(m, col): 
    mn, mx = float("inf"), float("-inf") 
    for i in map(itemgetter(col), m): 
     if mn > i: 
      mn = i 
     if mx < i: 
      mx = i 
    return mn, mx 


m = [[9, 2, 8], [4, 6, 8], [3, 1, 2]] 

mn, mx = func(m, 2) 
+0

我該如何做到這一點,使用戶輸入他想檢查哪一行(練習#)? –

+0

col是你想要檢查的列,當用戶輸入列號時,如果你的編號不是基於-1的數字,則將其轉換爲int並將其傳遞給函數。 –

0

如果您存儲你的成績是這樣的:

grades = [[9,2,8],[4,6,8],[3,1,2]] 

你可以得到最小的行i

def minInRow(grades,i): 
    return min(x for x in grades[i]) 

並且列中的最小值爲i

def minInColumn(grades,i): 
    return min(grade[i] for grade in grades) 

因此,例如minInColumn(grades,1)會給你結果1。

0

超級容易pandas(如果你能使用外部庫):

import pandas as pd 

df = pd.DataFrame(grades) 
df.index += 1 
df.columns += 1 

exercise = input('Gimme gimme grades: ') 

print df.loc[df[exercise].min()].name 

# output if exercise = 2: 
# 1 
+0

可悲的是我不能使用外部庫。 –