python中怎么找出列表中最小的元素_如何在python中获得列表的最小和最大元素

我能想到的最快的方法是对原始列表进行排序,然后选择第一个和最后一个元素。这样可以避免多次循环,但会破坏列表的原始结构。这可以通过简单地复制列表并仅对复制的列表排序来解决。我很好奇这是否比在下面的示例脚本中使用max()和min()慢:import time

l = [1,2,4,5,3]

print "Run 1"

t1 = time.time()

print "Min =", min(l)

print "Max =", max(l)

print "time =", time.time() - t1

print ""

print "l =", l

print ""

l = [1,2,4,5,3]

l1 = list(l)

print "Run 2"

t1 = time.time()

l1.sort()

print "Min =", l1[0]

print "Max =", l1[-1]

print "time =", time.time() - t1

print ""

print "l =", l

print "l1 =", l1

print ""

l = [1,2,4,5,3]

print "Run 3"

minimum = float('inf')

maximum = float('-inf')

for item in l:

if item < minimum:

minimum = item

if item > maximum:

maximum = item

print "Min =", minimum

print "Max =", maximum

print "time =", time.time() - t1

print ""

print "l =", l

令人惊讶的是,第二种方法在我的电脑上快了大约10毫秒。但至少在这个列表中,你不确定这个列表是如何有效的。在

我在计时脚本中添加了@Martijn Pieters的简单循环算法。(因为时间是这个问题中唯一值得探讨的重要参数。)我的结果是:

^{pr2}$

编辑:包含用于计时的timeit模块。在import timeit

from random import shuffle

l = range(10000)

shuffle(l)

def Run_1():

#print "Min =", min(l)

#print "Max =", max(l)

return min(l), max(l)

def Run_2():

l1 = list(l)

l1.sort()

#print "Min =", l1[0]

#print "Max =", l1[-1]

return l1[0], l1[-1]

def Run_3():

minimum = float('inf')

maximum = float('-inf')

for item in l:

if item < minimum:

minimum = item

if item > maximum:

maximum = item

#print "Min =", minimum

#print "Max =", maximum

return minimum, maximum

if __name__ == '__main__':

num_runs = 10000

print "Run 1"

run1 = timeit.Timer(Run_1)

time_run1 = run1.repeat(3, num_runs)

print ""

print "Run 2"

run2 = timeit.Timer(Run_2)

time_run2 = run2.repeat(3,num_runs)

print ""

print "Run 3"

run3 = timeit.Timer(Run_3)

time_run3 = run3.repeat(3,num_runs)

print ""

print "Run 1"

for each_time in time_run1:

print "time =", each_time

print ""

print "Run 2"

for each_time in time_run2:

print "time =", each_time

print ""

print "Run 3"

for each_time in time_run3:

print "time =", each_time

print ""

我的结果是:Run 1

time = 3.42100585452

time = 3.39309908229

time = 3.47903182233

Run 2

time = 26.5261287922

time = 26.2023346397

time = 26.7324208568

Run 3

time = 3.29800945144

time = 3.25067545773

time = 3.29783778232

对于大数组,排序算法非常慢。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值