Python - 不可解决的类型:str()< INT()

时间:2016-05-18 10:23:09

标签: python list

我有这段代码片段,它返回列表中最低整数的索引

indexes = sorted(range(len(File_2Column)), key=lambda i: File_1Col4[i])
sortedFile_2Col = [File_2Column[i] for i in indexes]
# you can repeat this line for all the columns you want to be sorted by that order

访问过的点和pathValue都是列表,包含以下内容:

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

然而,当我编译程序时,它始终将错误指向此行

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__)

我的代码出了什么问题?

1 个答案:

答案 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]

这也会检索最小值的索引,前提是输入列表中只有整数。