首页 > 其他分享 >20 re/collection/time/random模块

20 re/collection/time/random模块

时间:2023-07-31 22:22:32浏览次数:32  
标签:20 res random ret dict collection time print

re模块补充说明

import re
 ret = re.findall('a(b)c', 'abcabcabcabc')  #优先显示括号内东西
 print(ret)  # ['b', 'b', 'b', 'b']

 ret = re.findall('a(?:b)c', 'abcabcabcabc') #?:表示忽视括号
 print(ret)  # ['abc', 'abc', 'abc', 'abc']
 
ret = re.findall('(a)(b)(c)', 'abcabcabcabc')
 print(ret)   # [('a', 'b', 'c'), ('a', 'b', 'c'), ('a', 'b', 'c'), ('a', 'b', 'c')]  #不再是abc一个元素,而是元组里面的三个元素了

ret = re.findall('(?P<aaa>a)(b)(c)', 'abcabcabcabc')  #?P后面加<变量名>,下次直接调变量名就可以出现a
print(ret)   # [('a', 'b', 'c'), ('a', 'b', 'c'), ('a', 'b', 'c'), ('a', 'b', 'c')]
print(ret.group('aaa'))  #a

"""
findall默认是分组优先展示
    正则表达式中如果有括号分组 那么在展示匹配结果的时候
    默认只演示括号内正则表达式匹配到的内容!!!
也可以取消分组有限展示的机制
    (?:)  括号前面加问号冒号
"""


 ret = re.search('a(b)c', 'abcabcabcabc')  #search找到一个就行
 print(ret.group())  # abc
 print(ret.group(0))  # abc     0默认不管括号

 print(ret.group(1))  # b        可以通过索引的方式单独获取分组内匹配到的数据

 
ret = re.search('a(b)(c)', 'abcabcabcabc')
 print(ret.group())  # abc
 print(ret.group(0))  # abc
 print(ret.group(1))  # b        可以通过索引的方式单独获取分组内匹配到的数据
 print(ret.group(2))  # c        可以通过索引的方式单独获取分组内匹配到的数据
'''针对search和match有几个分组 group方法括号内最大就可以写几'''


# 分组之后还可以给组起别名
# ret = re.search('a(?P<name1>b)(?P<name2>c)', 'abcabcabcabc')
# print(ret.group('name1'))  # b
# print(ret.group('name2'))  # c

collections模块

1.具名元组(元组加个名字)
point = namedtuple('坐标',['x','y'])
p1 = point(1,2)
p2 = point(10,8)
print(p1,p2)  # 坐标(x=1, y=2) 坐标(x=10, y=8)
print(p1.x)  # 1
print(p1.y)  # 2S
"""具名元组的使用场景也非常的广泛 比如数学领域、娱乐领域等"""
2.双端队列
队列:先进先出   默认是只有一端只能进另外一端只能出(queue)
双端队列:两端都可以进出(deque)

import queue
 q = queue.Queue(3)  # 最大只能放三个元素
 存放元素
q.put(123)
q.put(321)
q.put(222)
q.put(444)  # 如果队列满了 继续添加则原地等待
  # 获取元素
print(q.get())  # 123
print(q.get())  # 321
print(q.get())  # 222
print(q.get())  # 如果队列空了 继续获取则原地等待



 from collections import deque
  q = deque([1,2,3])
  print(q)
  q.append(444)  # 右边添加元素
  print(q)
  q.appendleft(666)  # 左边添加元素
  print(q)
  q.pop()  # 右边弹出元素
  q.popleft()  # 左边弹出元素
3.字典相关
# 正常的字典内部是无序的

#如何让字典一直打印都是有序一定的呢?(这里python有自动优化,但是还是需要了解)
# # 有序字典OrderedDict
from collections import OrderedDict
 d2 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(d2)  #[('a', 1), ('b', 2), ('c', 3)]有序



#默认值字典defaultdict
"""
有如下值集合 [11,22,33,44,55,67,77,88,99,999],
将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
"""
#正常代码写
 l1 = [11,22,33,44,55,67,77,88,99,999]
 new_dict = {'k1':[],'k2':[]}
 for i in l1:
     if i > 66:
         new_dict['k1'].append(i)
     else:
         new_dict['k2'].append(i)
 print(new_dict)


#默认值写
from collections import defaultdict
values = [11, 22, 33,44,55,67,77,88,99,90]
my_dict = defaultdict(list)  # 字典所有的值默认都是列表  {'':[],'':[]}
for value in  values:
    if value>66:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)

4.计数器

res = 'abcdeabcdabcaba'
'''
统计字符串中所有字符出现的次数
    {'a':3,'b':5...}
'''

#自己用代码写
 new_dict = {}
 for i in res:
     if i not in new_dict:
         # 字符第一次出现 应该创建一个新的键值对
         new_dict[i] = 1
     else:
         new_dict[i] += 1
 print(new_dict)  {'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}



#用count写
from collections import Counter
r = Counter(res)
print(r)  # Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
print(r.get('a'))  # 可以当成字典使用

 

 

time模块

# 1.常用方法
1.time.sleep(secs)
    推迟指定的时间运行,单位为秒
      ps:该方法贯穿前后(基础、后期)
2.time.time()
    获取当前时间戳
  
  
# 2.三种用于表示时间的格式(彼此之间可以转换)
    1.时间戳
      距离1970年1月1日0时0分0秒至此相差的秒数  
        time.time()
  2.结构化时间
      该时间类型主要是给计算机看的,人看起来不太方便
        time.localtime()
          0    tm_year(年)    比如2011
          1    tm_mon(月)    1 - 12
          2    tm_mday(日)    1 - 31
          3    tm_hour(时)    0 - 23
          4    tm_min(分)    0 - 59
          5    tm_sec(秒)    0 - 60
          6    tm_wday(weekday)    0 - 6(0表示周一)
          7    tm_yday(一年中的第几天)    1 - 366
          8    tm_isdst(是否是夏令时)    默认为0
  3.格式化时间
      人最容易接收的一种时间格式  2000/1/21 11:11:11
      time.strftime()
       '%Y-%m-%d %H:%M:%S' # 2022-03-29 11:31:30
          '%Y-%m-%d %X'  # 2022-03-29 11:31:30
          %y 两位数的年份表示(00-99)
          %Y 四位数的年份表示(000-9999)
          %m 月份(01-12)
          %d 月内中的一天(0-31)
          %H 24小时制小时数(0-23)
          %I 12小时制小时数(01-12)
          %M 分钟数(00=59)
          %S 秒(00-59)
          %a 本地简化星期名称
          %A 本地完整星期名称
          %b 本地简化的月份名称
          %B 本地完整的月份名称
          %c 本地相应的日期表示和时间表示
          %j 年内的一天(001-366)
          %p 本地A.M.或P.M.的等价符
          %U 一年中的星期数(00-53)星期天为星期的开始
          %w 星期(0-6),星期天为星期的开始
          %W 一年中的星期数(00-53)星期一为星期的开始
          %x 本地相应的日期表示
          %X 本地相应的时间表示
          %Z 当前时区的名称
          %% %号本身
"""
记住一些常用的即可 其他的全部记录到自己的博客 以后能找到就行!!!
"""

 

时间类型的转换

格式化时间    <==> 结构化时间 <==>     时间戳

# 时间戳<-->结构化时间
gmtime
localtime
# 结构化时间<-->格式化时间
    strftime
    strptime
      
    time.strptime("2017-03-16","%Y-%m-%d")
    time.strptime("2017/03","%Y/%m")  前后必须一致
ps:UTC时间比我所在的区域时间早八个小时(时区划分)

 

datetime模块

# 基本操作
import datetime
print(datetime.date.today())  # 2022-03-29
print(datetime.datetime.today())  # 2022-03-29 11:55:50.883392
"""
date                意思就是年月日
datetime            意思就是年月日 时分秒
ps:后期很多时间相关的操作都是跟date和time有关系
"""



# res = datetime.date.today()
# print(res.year)  # 2022
# print(res.month)  # 3
# print(res.day)  # 29
# print(res.weekday())  # 1       星期0-6
# print(res.isoweekday())  # 2    星期1-7




"""时间差"""
ctime = datetime.datetime.today()
time_tel = datetime.timedelta(days=4)   # 有很多时间选项
print(ctime)  # 2022-03-29 12:01:52.279025
print(ctime + time_tel)  # 2022-04-02 12:01:52.279025
print(ctime - time_tel)  # 2022-03-25 12:03:34.495813

"""
针对时间计算的公式
    日期对象 = 日期对象 +/- timedelta对象
    timedelta对象 = 日期对象 +/- 日期对象
"""
res = ctime + time_tel
print(res - ctime)  # 4 days, 0:00:00

 

random模块

'''别名>>>:随机数模块'''
import random

print(random.random())  #  随机产生一个0到1之间的小数
print(random.uniform(2,4))  # 随机产生一个2到4之间的小数
print(random.randint(0,9))  # 随机产生一个0到9之间的整数(包含0和9)
print(random.randint(1,6))  #          举列子 :     掷骰子


l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
random.shuffle(l)  # 随机打乱一个数据集合(有参数)                洗牌
print(l)

ll1 = ['特等奖','张飞抱回家','如花','百万现金大奖','群内配对'] print(random.choice(ll1)) # 随机抽取一个 抽奖
ll = ['如花','C老师','R老师','J老师','M老师','张飞','龙龙'] print(random.sample(ll, 2)) # 随机指定个数抽样(该例子表示随机抽两个) 抽样

标签:20,res,random,ret,dict,collection,time,print
From: https://www.cnblogs.com/Milk1/p/17594425.html

相关文章

  • 2010新的开始
          1)养成习惯,经常主动回顾一段时间学到的东西(这不仅有利于巩固长时记忆,而且一段时间之后的回顾你可能已经因为新的知识学习从而对原先的认识有了进一步的看法,通过回顾,可以整合新旧知识,得到新的启发。2)创造回忆的机会:我知道第一条不顶用,没有人(好吧,很少有人)能够真正坚......
  • 日志 2012/10/12
    1.技术学习(android启动过程,Ui进程与其它线程处理looperhandermessage)  【整理一点资料】Andorid的进程和线程模型    2.技术小节  观察者模式(contentObserver,ScrollLayout)   小节文档<<观察者模式之常用监听Listener.docs>>    实例学习深入......
  • 2010中国互联网大会召开 移动互联…
    2010中国互联网大会召开移动互联网最热【Csdn8月17日报道】2010年中国互联网大会已于今日在北京国际会议中心举行。本次大会将进行三天,从第一天的情况来看,移动互联网话题最为热门。每个人都在谈移动互联网从大会议题上看,只有中国移动互联网设置了两场高峰会议,分别是18日下......
  • Java面试题 P20:Redis篇:Redis做为缓存,数据的持久化是怎么做的?
    Redis做为缓存,数据的持久化是怎么做的?在Redis中提供了两种数据持久化的方式:1、RDB  2、AOF       ......
  • [UUCTF 2022 新生赛]ez_rce
    [UUCTF2022新生赛]ez_rce题目来源:nssctf题目类型:web涉及考点:无参数rce1.先做代码审计:<?php##放弃把,小伙子,你真的不会RCE,何必在此纠结呢????????????if(isset($_GET['code'])){$code=$_GET['code'];if(!preg_match('/sys|pas|read|file|ls|cat|tac|head|tail|mo......
  • [SWPUCTF 2022 新生赛]js_sign
    [SWPUCTF2022新生赛]js_sign题目来源:nssctf题目类型:web涉及考点:JS分析1.题目给了一个传入口,不管传入什么都回显‘fuckoff’查看源代码:看到一个base64编码,先解码看看:2.搜了下发现tapcode是个编码方式,于是对flag进行tapcode解码把它构造成flag的形式即可:NS......
  • [SDOI2017] 数字表格
    传送门跟YY的gcd如出一辙,得到一个显然的柿子\[\prod_{k}F_{k}^{z}\]\[z=\sum_{d}\mu(d)\lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor\]那么我们设T=kd,\[\prod_{T}\prod_{k|T}F_{k}^x\]\[x=\mu(\frac{T}{k})\lfloor\frac{n}{T}\rfloor\lfl......
  • 2023-07-31:用r、e、d三种字符,拼出一个回文子串数量等于x的字符串。 1 <= x <= 10^5。 来
    2023-07-31:用r、e、d三种字符,拼出一个回文子串数量等于x的字符串。1<=x<=10^5。来自百度。答案2023-07-31:大体步骤如下:1.初始化一个字符串builder,用于构建结果字符串。2.初始化一个字符变量cur,初始值为'r',用于轮流使用字符'r'、'e'和'd'构建回文串。3.进入循环,直到输入......
  • [NOI2023] 深搜
    和考试的时候思路差不多。首先考虑钦定一部分关键点是合法的根,带上容斥系数。对于一条非树边,要求其在任何一个钦定点作为根的时候都不是横叉边。具体而言,对于一个钦定点集合,我们建出钦定点集合的虚树,那么符合条件的非树边有如下几类:不妨先考虑特殊性质\(B\),没有横叉边的情......
  • leetcode集训-2023年7月
    今天我想和大家分享一下我参与LeetcodeSQL题集训一个月来的心得体会。在这段时间里,我真的深入感受到SQL语句和数据库API的魅力,也体验到了数据库世界的各种趣味与挑战。SQL语句的执行顺序主要包含以下几个步骤:FROM:指定要查询的表或视图。WHERE:对FROM子句中的表进行条件过滤,只选择满......