2016-05-18 73 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] 

这也是检索最小值的索引,只要是只在输入列表中的整数,课程。

相关问题