2016-05-18 121 views
-1

我有這樣的代碼段返回最低整數的索引列表中的訪問的Python - Unorderable類型:STR()<int()函數

for x in range(0,len(points)): 
    minVal = min(range(len(pathValue)), key=pathValue.__getitem__) 
    if visited[x] != "T": visited[minVal]= "T" 

點和pathValue都是列表,其中包含以下:

points = ['A', 'B', 'C', 'D', 'E', 'F'] 
visited = ['F', 'F', 'F', 'F', 'F', 'F'] 
pathValue = [9, 5, 1, 2, 3, 4] 

然而,當我編譯程序它總是指向一個錯誤此行

minVal = min(range(len(pathValue)), key=pathValue.__getitem__) 

和s ays

Unorderable types: str() < int() 

我的代碼出了什麼問題?

+0

如果從命令提示符複製粘貼'pathvalue'列表會更好。即使'pathValue = ['9',5,1,2,3,4]',這會告訴你你正在得到的錯誤 –

+0

@manojprashantk:它不是列表中的第一個元素;在這種情況下,錯誤消息中的str()和int()會顛倒過來。但是,列表中有一個字符串對象。 –

+0

是的,我只是做了一個例子,並感謝指定如果第一個元素是一個字符串會發生什麼:) –

回答

0

並非在pathValue中的所有值都是整數。您至少有該列表中的一個字符串對象。

如果只有在pathValue整數,你的表達作品:

>>> pathValue = [9, 5, 1, 2, 3, 4] 
>>> min(range(len(pathValue)), key=pathValue.__getitem__) 
2 

但添加一個字符串,你會得到你的特定錯誤:

>>> pathValue = [9, 5, 1, 2, 3, 4, 'foo'] 
>>> min(range(len(pathValue)), key=pathValue.__getitem__) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unorderable types: str() < int() 

絕對確保您pathValue列表只包含整數。

請注意,我用enumerate() functionoperator.itemgetter() object這裏,而不是range()pathValue.__getitem__

from operator import itemgetter 

minVal = min(enumerate(pathValue), key=itemgetter(1))[0] 

這也是檢索最小值的索引,只要是只在輸入列表中的整數,課程。

相關問題