鱼C论坛

 找回密码
 立即注册
查看: 1898|回复: 8

[技术交流] Python 课后作业详解 016:序列!序列!

[复制链接]
发表于 2020-4-18 20:38:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Python 课后作业详解 016:序列!序列!


0. 猜想一下 min() 这个BIF的实现过程

其实很简单的,只要设置一个变量(这里方便称呼,设为x)用于存放最小值,

然后遍历列表,如果遍历到的值比x小,则x = 遍历到的值(x默认为列表第一个元素)

BUT,当时我是怎么想的呢?

直接排个序,然后返回第一个就好:
def min(seq):
    # 万一是元组就不好说了,这里先转换为列表
    temp = list(seq)
    temp.sort()
    return temp[0]

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([1,2,3,"4",5,6,7,8,9]))

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-18 20:54:12 | 显示全部楼层
def min(seq):
    # 万一是元组就不好说了,这里先转换为列表
    temp = list(seq)
    min_v = temp[0]
    for i in temp:
        min_v = i if min_v > i else  min_v

    return min_v

一上来就排序不好吧,毕竟遍历一边才O(n),排序的复杂度不一定是O(n)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-18 20:57:34 | 显示全部楼层
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 时很捞……于是就禁止使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2020-4-18 21:01:29 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-4-18 20:57
0.一个实现比较完整的 min():

1.sum() 那个不是缺陷,那个是故意设计的,因为 sum() 用于 str,bytes,by ...

这个min写的好丰富啊,,,涨姿势了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-18 21:02:24 | 显示全部楼层
jkluoling1992 发表于 2020-4-18 20:54
def min(seq):
    # 万一是元组就不好说了,这里先转换为列表
    temp = list(seq)

我并不认为做这个作业的鱼油会考虑到这一点
而且,只要实现就好,为啥要考虑这些复杂度?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-18 21:05:42 | 显示全部楼层
qiuyouzhi 发表于 2020-4-18 21:02
我并不认为做这个作业的鱼油会考虑到这一点
而且,只要实现就好,为啥要考虑这些复杂度?

写代码不考虑时间复杂度和空间复杂度吗?现在是练习没错的,可以实现就好,但以后工作了,这些东西都是自然而然要考虑的啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-18 21:08:09 | 显示全部楼层
jkluoling1992 发表于 2020-4-18 21:05
写代码不考虑时间复杂度和空间复杂度吗?现在是练习没错的,可以实现就好,但以后工作了,这些东西都是自 ...

你都说了现在是练习,就不要考虑时间,空间复杂度什么的了
后面慢慢会学,那就是后面的事情了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-18 21:16:30 | 显示全部楼层
qiuyouzhi 发表于 2020-4-18 21:08
你都说了现在是练习,就不要考虑时间,空间复杂度什么的了
后面慢慢会学,那就是后面的事情了

您说的对,,交流贴嘛,看看就好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-18 21:17:09 | 显示全部楼层
jkluoling1992 发表于 2020-4-18 21:01
这个min写的好丰富啊,,,涨姿势了

跟 builtins 功能完全一样哦~不过效率辣鸡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 12:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表