效率 函数
#'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)
# 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])