我有这段代码片段,它返回列表中最低整数的索引
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__)
我的代码出了什么问题?
答案 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()
function和operator.itemgetter()
object,而不是range()
和pathValue.__getitem__
:
from operator import itemgetter
minVal = min(enumerate(pathValue), key=itemgetter(1))[0]
这也会检索最小值的索引,前提是输入列表中只有整数。