什么更快?列表的最小值然后是最小值的索引,vs 遍历列表
What is faster? minimum of list then index of minimum, vs iterating through list
我正在使用 python 并且我有一个列表列表,比如 list1,其中每个内部列表都有 2 个元素。
我有第二个列表,比如 list2。 list1的第i个元素对应list2的第i个元素
是否更快找到:
lowest = min(list1, key=lambda x: x[1])
index = list1.index(lowest)
correspondingLowest = list2[index]
还是更快:
lowest = list1[0]
lowestValue = sys.maxint
saveIndex = 0
for i in range(len(list1)):
if list1[i][1] < lowestValue:
lowest = i
saveIndex=i
correspondingLowest = list2[saveIndex]
我不知道内置函数 min(list) 和 list.index 是如何工作的,但我假设它们都涉及遍历整个列表,在 min 的情况下,直到索引' .index 情况下的第 th 个元素。而在第二个选项中,它只会遍历列表一次。
我的 list1 和 list2 中至少有 100000 个元素,因此任何差异都会很明显。我希望还有其他可能更快的选择吗?
注意,我需要找到 lowest 和 correspondingLowest 的值,我不只是找到 lowest 以便我可以找到 correspondingLowest。
使用 enumerate()
function 生成索引并使用 min()
的 key
参数函数以确保它从生成的 (index, element) 元组中找到最小的列表值:
min_index, min_value = min(enumerate(list1), key=lambda ie: ie[1][1])
找到最小值然后查找索引必须扫描列表两次,用 C 实现的 min()
循环将击败 Python 循环 hands-down。
如果您所做的只是将索引从一个列表映射到另一个列表,您也可以 zip 两个列表:
min1, min2 = min(zip(list1, list2), key=lambda ee: e[0][1])
这会选择 list1
中的最小值,returns 该值 以及 list2
中的相应值。如果这是 Python 2,使用 future_builtins.zip()
function 以实现未来的兼容性并避免在内存中构建整个配对列表:
try:
# Python 2
from future_builtins import zip
except ImportError:
# Python 3, it is built-in
pass
我正在使用 python 并且我有一个列表列表,比如 list1,其中每个内部列表都有 2 个元素。 我有第二个列表,比如 list2。 list1的第i个元素对应list2的第i个元素
是否更快找到:
lowest = min(list1, key=lambda x: x[1])
index = list1.index(lowest)
correspondingLowest = list2[index]
还是更快:
lowest = list1[0]
lowestValue = sys.maxint
saveIndex = 0
for i in range(len(list1)):
if list1[i][1] < lowestValue:
lowest = i
saveIndex=i
correspondingLowest = list2[saveIndex]
我不知道内置函数 min(list) 和 list.index 是如何工作的,但我假设它们都涉及遍历整个列表,在 min 的情况下,直到索引' .index 情况下的第 th 个元素。而在第二个选项中,它只会遍历列表一次。
我的 list1 和 list2 中至少有 100000 个元素,因此任何差异都会很明显。我希望还有其他可能更快的选择吗?
注意,我需要找到 lowest 和 correspondingLowest 的值,我不只是找到 lowest 以便我可以找到 correspondingLowest。
使用 enumerate()
function 生成索引并使用 min()
的 key
参数函数以确保它从生成的 (index, element) 元组中找到最小的列表值:
min_index, min_value = min(enumerate(list1), key=lambda ie: ie[1][1])
找到最小值然后查找索引必须扫描列表两次,用 C 实现的 min()
循环将击败 Python 循环 hands-down。
如果您所做的只是将索引从一个列表映射到另一个列表,您也可以 zip 两个列表:
min1, min2 = min(zip(list1, list2), key=lambda ee: e[0][1])
这会选择 list1
中的最小值,returns 该值 以及 list2
中的相应值。如果这是 Python 2,使用 future_builtins.zip()
function 以实现未来的兼容性并避免在内存中构建整个配对列表:
try:
# Python 2
from future_builtins import zip
except ImportError:
# Python 3, it is built-in
pass