Python 课后作业详解 016:序列!序列!
Python 课后作业详解 016:序列!序列!0. 猜想一下 min() 这个BIF的实现过程
其实很简单的,只要设置一个变量(这里方便称呼,设为x)用于存放最小值,
然后遍历列表,如果遍历到的值比x小,则x = 遍历到的值(x默认为列表第一个元素)
BUT,当时我是怎么想的呢?
直接排个序,然后返回第一个就好:
def min(seq):
# 万一是元组就不好说了,这里先转换为列表
temp = list(seq)
temp.sort()
return temp
print(min((5,7,9,3,2,1,6)))
1. 视频中我们说 sum() 这个BIF有个缺陷,就是如果参数里有字符串类型的话就会报错,
请写出一个新的实现过程,自动“无视”参数里的字符串并返回正确的计算结果。
这个咋子弄呢?
直接遍历给的参数,然后判断类型(type或isinstance)就好了。
def Sum(seq):
res = 0
for each in seq:
if type(each) == str:
continue
res += each
return res
print(Sum())
def min(seq):
# 万一是元组就不好说了,这里先转换为列表
temp = list(seq)
min_v = temp
for i in temp:
min_v = i if min_v > i elsemin_v
return min_v
一上来就排序不好吧,毕竟遍历一边才O(n),排序的复杂度不一定是O(n) 0.一个实现比较完整的 min():_no_arg=object()
def min(iterable,/,*vars,key=None,default=_no_arg):
if vars:
if default is _no_arg:
least=iterable
else:
raise TypeError("Cannot specify a default for min() with multiple positional arguments")
else:
vars=iter(iterable)
try:
least=next(vars)
except StopIteration:
if default is None:
raise ValueError("min() arg is an empty sequence")
else:
return default
if key is None:
for var in vars:
if var<least:
least=var
else:
flag=key(least)
for var in vars:
temp=key(var)
if temp<flag:
flag=temp
least=var
return least
1.sum() 那个不是缺陷,那个是故意设计的,因为 sum() 用于 str,bytes,bytearray 时很捞……于是就禁止使用{:10_327:} 永恒的蓝色梦想 发表于 2020-4-18 20:57
0.一个实现比较完整的 min():
1.sum() 那个不是缺陷,那个是故意设计的,因为 sum() 用于 str,bytes,by ...
这个min写的好丰富啊,,,涨姿势了{:10_256:} jkluoling1992 发表于 2020-4-18 20:54
def min(seq):
# 万一是元组就不好说了,这里先转换为列表
temp = list(seq)
我并不认为做这个作业的鱼油会考虑到这一点
而且,只要实现就好,为啥要考虑这些复杂度? qiuyouzhi 发表于 2020-4-18 21:02
我并不认为做这个作业的鱼油会考虑到这一点
而且,只要实现就好,为啥要考虑这些复杂度?
写代码不考虑时间复杂度和空间复杂度吗?现在是练习没错的,可以实现就好,但以后工作了,这些东西都是自然而然要考虑的啊 jkluoling1992 发表于 2020-4-18 21:05
写代码不考虑时间复杂度和空间复杂度吗?现在是练习没错的,可以实现就好,但以后工作了,这些东西都是自 ...
你都说了现在是练习,就不要考虑时间,空间复杂度什么的了
后面慢慢会学,那就是后面的事情了 qiuyouzhi 发表于 2020-4-18 21:08
你都说了现在是练习,就不要考虑时间,空间复杂度什么的了
后面慢慢会学,那就是后面的事情了
您说的对,,交流贴嘛,看看就好 jkluoling1992 发表于 2020-4-18 21:01
这个min写的好丰富啊,,,涨姿势了
跟 builtins 功能完全一样哦~不过效率辣鸡{:10_262:}
页:
[1]