我有一个列表列表,例如q = [[1,2],[3,4]]
,其中每个子列表都是 2 个整数的列表,我返回每个极值点的索引(我认为?
并且在第二个条目中有具有相同值的其他子列表时,返回最小/最大第二值条目列表中具有最小/最大第一个值的索引。
例如,如果q = [[1, 2], [3, 4], [1, 0], [0, 5]]
,我需要最小秒,如果平局,则分钟秒,然后第一。 所以我需要min(S)
才能返回[1,0]
. 相反,它似乎返回的是[0,5]
.
>>> q = [[1,2],[3,4]]
>>> min(q)
[1, 2]
>>> q.append([1,0])
>>> min(q)
[1, 0]
>>> q.append([0,5])
>>> min(q)
[0, 5]
>>> q
[[1, 2], [3, 4], [1, 0], [0, 5]]
根据这里的这个答案,比较列表按元素顺序比较它们,使用下一个列表条目进行决胜。
>>> q.append([0,6])
>>> q.append([0,4])
>>> min(q)
[0, 4]
>>> q
[[1, 2], [3, 4], [1, 0], [0, 5], [0, 6], [0, 4]]
>>>
有什么方法可以控制比较中的顺序吗? 我尝试通读文档,但我不明白我在读什么。
使用 [ min()
](1]) 的 key
关键字参数:
例:
>>> from operator import itemgetter
>>> q = [[1, 2], [3, 4], [1, 0], [0, 5]]
>>> min(q, key=itemgetter(1, 0))
[1, 0]
这将按键函数itemgetter(1, 0)
对可迭代q
进行排序,该键函数基本上返回(2nd-item, 1st-item)
的tuple
,并且等效于min(q, key=lambda x: (x[1], x[0]))
。
min(iterable[, key])
min(arg1, arg2, *args[, key])
\返回可迭代对象中最小的项或两个或多个参数中的最小项。
如果提供了一个位置参数,则可迭代参数必须是非空的 可迭代(例如非空字符串、元组或列表)。最小的 返回可迭代对象中的项。如果两个或多个位置参数 提供,返回最小的位置参数。
可选键参数指定单参数排序函数 就像用于list.sort()一样。如果提供关键参数,则必须是 关键字形式(例如,min(a,b,c,key=func))。
在 2.5 版更改: 添加了对可选键参数的支持。
这对你有用吗?
min(q, key = lambda x: (x[1],x[0]))
您可以使用扩展切片语法来反转子列表:
>>> q = [[1, 2], [3, 4], [1, 0], [0, 5]]
>>> min(q, key=lambda sl: sl[::-1])
[1, 0]