我有一个二维列表,其中每个条目都有一个时间戳(int)和第二个值,可以是 int、字符串或对象。
我使用 min() 函数来获取具有最低时间戳的条目:
a = [[2, "start C"],
[6, 2484],
[15, "finish C"]]
print(min(a))
Run Code Online (Sandbox Code Playgroud)
输出:
[2, 'start C']
Run Code Online (Sandbox Code Playgroud)
当存在相同的最低时间戳时, min() 将比较这些项目的第二列。
仅当第二列具有可比值时,此操作才有效:
[2, 'start C']
Run Code Online (Sandbox Code Playgroud)
输出:
[2, 'start B']
Run Code Online (Sandbox Code Playgroud)
如果第二列包含不同的数据类型,则会引发错误:
a = [[2, "start C"],
[2, "start B"],
[15, "finish C"]]
print(min(a))
Run Code Online (Sandbox Code Playgroud)
输出:
TypeError: '<' not supported between instances of 'int' and 'str'
Run Code Online (Sandbox Code Playgroud)
如何只检查第一列的最小值?当存在相同的时间戳时,它应该简单地返回遇到的第一个项目。
您可以传递一个比较键
min(my_list, key=lambda x: x[0])
Run Code Online (Sandbox Code Playgroud)
默认情况下,python 使用第一项进行比较,如果出现平局,则使用第二项作为决胜局(依此类推),这就是您收到错误的原因。