2011-11-05 46 views
0

我已經證明自己關於「鍵=拉姆達」的功能,並發現其使用一個很好的參考:蟒蛇鍵=拉姆達理解和C#相當於

http://www.daniweb.com/software-development/python/threads/376964

感謝我才明白做下面的代碼是「應該」是什麼:

def _min_hull_pt_pair(hulls): 
    """Returns the hull, point index pair that is minimal.""" 
    h, p = 0, 0 
    for i in xrange(len(hulls)): 
     j = min(xrange(len(hulls[i])), key=lambda j: hulls[i][j]) 
     if hulls[i][j] < hulls[h][p]: 
      h, p = i, j 
    return (h, p) 

但是我有下面的語法問題:

 j = min(xrange(len(hulls[i])), key=lambda j: hulls[i][j]) 

我懷疑,是一條巨蟒學徒儘管快速學習:

1,我需要追溯調用堆棧像明白了什麼「型」或者更簡單的「價值」我得到檢索hulls[i][j]? (我讀過python使用'duck typing',這可以解釋這種需求,如果我沒有弄錯的話)。

2- key=lambda j基本上'檢索'外殼的[i][j]元素,不是嗎?但是這是否意味着hulls[i][j]是一個整數類型,因爲'for'迭代使用for的xrange來調用'min'?

3-可選:是否存在與Python的min相當或可比較的c#?

在此先感謝。

回答

1
  1. 是的。特別是,根據運行時發生的情況,船體[i] [j]可以是任何類型或任何值。例如所有的船體可以是整數,但你可以設置hulls[i][j]='foo'

  2. 是的,lambda返回船體第i行的第j個元素。船體[i] [j]可以是任何類似的東西,例如min('a','b') is 'a'

+0

感謝您的幫助。所以關於第二點,只要我能'分'任何兩種類型,這對蟒蛇公平嗎?基本上,我用'別的'xrange'(如果我沒有弄錯的話返回一個int數組)的事實並不意味着'別的'是int!!哈!我討厭python的不嚴格:) – roamcel

+1

事實上,你並沒有用lambda來制定'xrange'。解構一點:xrange部分構造範圍[0,len(hulls [i]))中的數字,key定義將被「縮小」的特定值。表達爲一個列表理解,你可能會發現也可能不會更容易閱讀:'j = min([shell] [i] [x] for x in xrange(len(hulls [i]))])' – ryanbraganza

+0

haha​​h that's crazy ,如果沒有幫助,我不會得到它。 :d – roamcel