• day15(模块)


    效率 函数

    #'aa'
    # 'abab'
    #'abcdabcd'
    #重复的部分不会超过一半 循环 整个和半个的效率是不一样的
    
    #'aaaaa' == 'a' * len/len('a')
    # 'abcdeabc' # 检测到第五个
    # abab == ab*len/len(ab) ab*4/2 ab*2
    
    def func(s):
    length = len(s)
    # 1,length//2 #整除 奇数的话 9个 不会重复 可能三个
    for i in range(1,length//2+1):
    num = length//i #8/3
    if s[:i]*num == s:
    return True
    else:
    return False
    while 1:
    s = input('>>>')
    ret = func(s)
    print(ret)
    View Code
    # 2.
    # 现有列表alist = [3, 1, -4, 2, -6]
    # 按照元素的绝对值大小进行排序
    alist = [3, 1, -4, 2, -6]
    ret1 = sorted(alist)
    # reversed()      #返回生成器  可迭代的
    ret = reversed(alist)
    print(ret)   #<list_reverseiterator object at 0x00000000025BBB38>
    # #排序  得知道具体值 所以生成一个新的列表会占用额外的内存   从小的地方开始想  大的之后就不会   更推荐 翻转
    print(ret1)  #[-6, -4, 1, 2, 3]  #翻转  不必知道 每个序列的值是什么 从后-1 往前 -5
    # list 提供的方法都是修改列表本身的
    # 内置函数是在 原本有的序列基础上 在生成一个新的# alist.reverse()# alist.sort()
    alist.sort(key=abs) # 函数的内存地址 #用这种
    print(alist)    #[1, 2, 3, -4, -6]
    #不用这种  又生成新的
    ret1 = sorted(alist,key=abs)
    print(ret1)

    # 3.
    # 已知ip = '192.168.156.254'
    # 提取各部分并写入列表中

    # 4.
    # 在以上题基础上实现写一个函数, 完成功能, 然后将列表返回
    # 多用函数!!!! reverse 生成器  sort 翻转 list.sort()  ret=sort()
    ip = '192.168.156.254'
    def func(ip):
        lst = ip.split('.')
        return lst
    ret = func(ip)
    print(ret)
    # 5.
    # 输入某年某月某日, 判断是这一年中的第几天?(用内置模块实现)
    import time
    # t = input('>>>')
    # str_t = time.strptime(t,'%Y-%m-%d')
    # 一般情况下 input 不放函数里面 有可能从数据库里提取(就用不到了) 也不再函数里使用pri
    # def get_day(t,fmt = '%Y-%m-%d'):  # 变量清晰
    #     str_t = time.strptime(t, '%Y-%m-%d')
    #     return str_t.tm_yday
    # print(get_day(t))
    
    #所有的输入 在外面 所有的结果 用 return  格式用 默认值 可以改


    # 6.
    # 一行代码实现[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]


    # 7.
    # 从0 - 99
    # 这个100个数中随机取出10个不重复的数
    import random
    ret = random.sample(range(100),10)
    print(ret)
    # 8.
    # 一行代码, 通过filter和lambda函数输出以下列表索引为基数对应的元素
    #
    lis = [12, 13, 14, 151, 5, 16, 17, 117, 133, 144, 177]
    print(list(filter((lambda x:lis.index(x)%2),lis)))
    print(list(filter((lambda num:lis.index(num)%2==1),lis)))
    #下面的原理
    def func(num):
        ind = lis.index(num)
        if ind %2==1 :
            return True
    ret = filter(func,lis)
    print(list(ret))
    # 9.
    # 将下列数据转成想要的结果, 尽量用简洁的方式实现:
    #
    # 原数据lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    # 转换后
    # li = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    #
    # 10.
    # 实现一个装饰器, 通过调用一次装饰器使被装饰的函数调用5次
    #  背过   厉害的人
    def wrapper(func):
        def inner(*args,**kwargs):
            for i in range(5):
                ret = func(*args,**kwargs)
            return ret
        return inner
    @wrapper
    def func():
        print('123')
    func()
    # 11.将列表内的元素, 根据位数被合并成字典(升级题)
    # lst = [1, 2, 3, 4, 12, 13, 14, 123, 124, 125, 1234, 1235, 1236, 1237, 12345, 12346, 12347]
    # 变成
    # {
    # 1: [1, 2, 3, 4],
    # 2: [12, 13, 14],
    # 3: [123, 124, 125],
    # 4: [1234, 1235, 1236, 1237],
    # 5: [12345, 12346, 12347]
    # }
    from collections import defaultdict
    lst = [1, 2, 3, 4, 12, 13, 14, 123, 124, 125, 1234, 1235, 1236, 1237, 12345, 12346, 12347]
    d = defaultdict(list)
    for i in lst:
        d[len(str(i))].append(i)
    print(d)  # 不用转了  效率也不高  不太利于程序的效率
    # print(dict(d))

    # 12.
    # 输入一个不是空的字符串, 判断这个字符串是不是由一个子字符重复多次组成, 字符只包含小写字母, 且长度不超过1000
    # (升级题)
    # 示例一:
    # 输入: "abab"
    # 这种就输出True, 因为输入的是ab重复组成的字符串
    # 示例二:
    # 输入: "abcabcabc"
    # 这种就输出True, 因为输入的是abc重复组成的字符串
    # 示例三:
    # 输入: "abcdabcd"
    # 这种就输出True, 因为输入的是abcd重复组成的字符串
    # 示例四:
    # 输入: 'abc"
    # 这种就输出False, 因为输入的没有重复组成字符串

    #abcab 不是  #abcabc  abcdabcdabcd
    
    #'aa'
    # 'abab'
    #'abcdabcd'
    #重复的部分不会超过一半  循环 整个和半个的效率是不一样的
    
    #'aaaaa'  == 'a' * len/len('a')
    # 'abcdeabc' # 检测到第五个
    # abab == ab*len/len(ab)  ab*4/2  ab*2
    
    def func(s):
        length = len(s)
        # 1,length//2 #整除  奇数的话  9个 不会重复  可能三个
        for i in range(1,length//2+1):
            num = length//i   #8/3
            if s[:i]*num == s:
                return True
        else:
            return  False
    while 1:
        s = input('>>>')
        ret = func(s)
        print(ret)

    附加+++:

    昨日回顾

    :  

    #常用模块
    # 时间模块
        # time
            #time 是datetime 的底层模块
            #时间戳 localtime/gmtime()--->结构化 strftime---->格式化
            # 时间戳 <---mktime  结构化 <----strptime格式化
            #时间戳 是一样的  只不过 转的不一样 gm转的是英国的 local 是中国的
    #time.time()时间戳
            #结构化=time.localtime(时间戳)
            #字符串=time.strftime(结构化)
        #datetime
            #事件对象
            #时分秒
            #计算时间差
            # t = datetime.datetime.now()#跟时间相关的 文件句柄差不多
            # print(t.date())
    #collections
        #Counter
        #可命名元组  namedtuple
        #双端队列  deque
        #默认字典 defaultdict

    from collections import Iterable,Iterator
    # 可迭代对象 迭代器   了不起的collections  很多东西
    print(isinstance(range(10),Iterable))
    print(isinstance(range(10),Iterator))
    print(isinstance(open('a','w'),Iterator))
    print(isinstance(open('a','w'),Iterable))
    # True
    # False
    # True
    # True
    from collections import defaultdict
    def func():
        return 5
    dic = defaultdict(lambda :5)
    dic1 = defaultdict(func)
    dic = defaultdict(set)
    dic = defaultdict(list)
    print(dic['a'])
    print(dic1['a'])
    #双端队列 和列表的区别 不表现在用法上
    #效率 底层的 数据结构  学了东西 区别和联系 好记
    #123456 1之前insert一个值 全部往后挪 列表 删了一个 1 都往上 挪
    # 用列表 用 append pop() 专业 非常快 用pop(0)这样的非常慢
    # 双端 0 next 1 next 2 next 断一个连一个 删除和添加一个非常高
    # 列表 找值速度也非常快(索引) 最后一个增添快 ‘’
    # 双端只是从中间插入 或者 删除比较频繁的时候 列表 单纯的append pop 和找值时



    from collections import deque
    
    d = deque([1,2,3,4])
    print(d[1])
  • 相关阅读:
    2015年5月1日 转载--各种变量在内存中的分布
    2015年4月30日 计算两个日期天数,写的代码
    2015年4月29日 dayofweek
    2015年4月28日
    2015年4月28日----高大上的数组,进制准换,最多是35进制
    2015年4月27日---C语言:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
    2015年4月27日
    《C++ Primer》学习笔记:迭代器介绍
    《C++ Primer》学习笔记:3.3.3其他vector操作
    《C++ Primer》学习笔记:向vector对象添加元素蕴含的编程假定
  • 原文地址:https://www.cnblogs.com/Doner/p/10569856.html
Copyright © 2020-2023  润新知