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])
原文地址:https://www.cnblogs.com/Doner/p/10569856.html