第四周代码问题记录

1、python中的正则表达式应用

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

re.match(pattern, string, flags=0)

pattern

匹配的正则表达式

string

要匹配的字符串。

flags

标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

re.search 扫描整个字符串并返回第一个成功的匹配。

re.search(pattern, string, flags=0)

findall:在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次 findall 匹配所有。

re.finditer和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:

  1. re.I 忽略大小写
  2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
  3. re.M 多行模式
  4. re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
  5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
  6. re.X 为了增加可读性,忽略空格和 # 后面的注释

参考:https://www.cnblogs.com/feifeifeisir/p/10627474.html

2、python中的字典集合分组

假设以下有以下字典集合数据,需要通过日期分组:

image.png

首先按照对日期字段进行排序,然后调用itertools.groupby()函数:

image.png

groupby()函数在每次迭代的时候,会返回一个分组后的日期值和一个迭代器对象,迭代器对象包含对应日期值的所有对象。

 occurrences.sort(key = itemgetter('order')) # 按照对order字段进行排序
    for middle,items in groupby(occurrences,key = itemgetter('middle')): 。
        lists  = list(items) # 迭代器只能迭代一次,所以转化为列表进行操作
        if len(lists) > 1: # 每类分组中需要至少两组数据才能形成模式
            eachpatterns = GroupByUrl(lists)
            patterns = patterns + eachpatterns

注:在使用groupby函数有一个很重要的步骤,就是我们要在使用groupby函数前,使用itemgetter函数将字典进行排序。如果没有排序,我们是得不到想要的结果。

参考:集合中的 字典分组 https://blog.csdn.net/a575553272/article/details/80415919

3、获取字典集合分组后的每组长度

可以将其转换为这样的列表:

clusterList = list(clusterList)

或者做到这一点,一步到位:

length = len(list(clusterList))

但是貌似迭代器只能迭代一次,需要转化后进行操作,具体待考证

参考:http://www.voidcn.com/article/p-dzmtrvav-bsw.html

4、python中字符串分割

通过split()方法切割字符串

str.split(str="", num=string.count(str)).

  • str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
  • num -- 分割次数。默认为 -1, 即分隔所有。

参考:https://www.runoob.com/python/att-string-split.html

5、python合并集合和列表

合并两个集合:

a = {1,2,3}
b = {3,4,5}
c = a | b

 

合并两个列表用+运算即可:

a = [1,2,3]
b = [4,5,6]
c = a + b

参考:https://www.jb51.net/article/140998.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值