如何仅对二维列表的第一列使用 min()

Joh*_*aft 2 python max min

我有一个二维列表,其中每个条目都有一个时间戳(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)

如何只检查第一列的最小值?当存在相同的时间戳时,它应该简单地返回遇到的第一个项目。

blu*_*ote 5

您可以传递一个比较键

min(my_list, key=lambda x: x[0])
Run Code Online (Sandbox Code Playgroud)

默认情况下,python 使用第一项进行比较,如果出现平局,则使用第二项作为决胜局(依此类推),这就是您收到错误的原因。