如何仅对二维列表的第一列使用 min()
How to use min() only with first column of 2-dimensional list
我有一个二维列表,其中每个条目都有一个时间戳 (int) 和第二个可以是 int、字符串或对象的值。
我正在使用 min() 函数获取具有最低时间戳的条目:
a = [[2, "start C"],
[6, 2484],
[15, "finish C"]]
print(min(a))
输出:
[2, 'start C']
当存在相同的最低时间戳时,min() 将比较这些项目的第二列。
这仅在第二列具有可比较的值时有效:
a = [[2, "start C"],
[2, "start B"],
[15, "finish C"]]
print(min(a))
输出:
[2, 'start B']
如果第二列包含不同的数据类型,则会引发错误:
a = [[2, "start C"],
[2, 2484],
[15, "finish C"]]
print(min(a))
输出:
TypeError: '<' not supported between instances of 'int' and 'str'
如何让只检查第一列的最小值?
当有相同的时间戳时,它应该只是 return 遇到的第一个项目。
你可以传递一个比较键
min(my_list, key=lambda x: x[0])
默认情况下,python 使用第一项进行比较,如果出现平局,则使用第二项作为决胜局(依此类推),这就是出现错误的原因。
min
接受一个 key
参数,可用于获得预期的行为:
from operator import itemgetter
a = [[2, "start C"],
[6, 2484],
[15, "finish C"]]
min(a, key=itemgetter(0))
# [2, 'start C']
这相当于在@blue_note的解决方案中使用自定义 lambda 函数对内部列表进行切片,但通常会更快一些(尽管这主要是一种习惯,因为在必须获取多个项目时更方便正如所解释的 here):
min(my_list, key=lambda x: x[0])
通过使用itemgetter
,仅获取每个内部列表中的第一个元素进行排序,然后计算该子集中的最小值
我有一个二维列表,其中每个条目都有一个时间戳 (int) 和第二个可以是 int、字符串或对象的值。
我正在使用 min() 函数获取具有最低时间戳的条目:
a = [[2, "start C"],
[6, 2484],
[15, "finish C"]]
print(min(a))
输出:
[2, 'start C']
当存在相同的最低时间戳时,min() 将比较这些项目的第二列。
这仅在第二列具有可比较的值时有效:
a = [[2, "start C"],
[2, "start B"],
[15, "finish C"]]
print(min(a))
输出:
[2, 'start B']
如果第二列包含不同的数据类型,则会引发错误:
a = [[2, "start C"],
[2, 2484],
[15, "finish C"]]
print(min(a))
输出:
TypeError: '<' not supported between instances of 'int' and 'str'
如何让只检查第一列的最小值? 当有相同的时间戳时,它应该只是 return 遇到的第一个项目。
你可以传递一个比较键
min(my_list, key=lambda x: x[0])
默认情况下,python 使用第一项进行比较,如果出现平局,则使用第二项作为决胜局(依此类推),这就是出现错误的原因。
min
接受一个 key
参数,可用于获得预期的行为:
from operator import itemgetter
a = [[2, "start C"],
[6, 2484],
[15, "finish C"]]
min(a, key=itemgetter(0))
# [2, 'start C']
这相当于在@blue_note的解决方案中使用自定义 lambda 函数对内部列表进行切片,但通常会更快一些(尽管这主要是一种习惯,因为在必须获取多个项目时更方便正如所解释的 here):
min(my_list, key=lambda x: x[0])
通过使用itemgetter
,仅获取每个内部列表中的第一个元素进行排序,然后计算该子集中的最小值