版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenlushun12/article/details/80027434
python中实现的排列组合
排列的定义:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 A(n,m)表示。
import itertools
mylists = list(itertools.permutations([1, 2, 3, 4], 3))
print(mylists)
print(len(mylists)) # 24
组合(combination),数学的重要概念之一。从n个不同元素中每次取出m个不同元素(0≤m≤n),不管其顺序合成一组,称为从n个元素中不重复地选取m个元素的一个组合。
import itertools
mylist = list(itertools.combinations([1, 2, 3, 4], 3))
print(mylist)
排列组合
import itertools
# 排列组合,生成密码的可能性
mylist = list(itertools.product([1, 2, 3, 4], repeat=4))
print(mylist)
re模块
https://www.cnblogs.com/tina-python/p/5508402.html
re.compile(pattern, flags=0)
# 从头匹配
re.match(pattern, string, flags=0)
re.fullmatch(pattern, string, flags=0)
# 全范围查找
re.search(pattern, string, flags=0)
re.split(pattern, string, maxsplit=0, flags=0)
# 遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。
re.findall(pattern, string, flags=0)
re.finditer(pattern, string, flags=0)
re.sub(pattern, repl, string, count, flags=0)
re.subn(pattern, repl, string, count=0, flags=0)
re.error(msg, pattern=None, pos=None)
regex.search(string [, pos[, endpos]])
flags 的值可以是:
re.I(IGNORECASE) 忽略大小写,括号内是完整的写法
re.M(MULTILINE) 多行模式,改变^和$的行为
re.S(DOTALL) 点可以匹配任意字符,包括换行符
re.L(LOCALE) 做本地化识别的匹配,不推荐使用
re.U(UNICODE) 使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flag
re.X(VERBOSE) 冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释
正则表达式中常用的字符含义
- 普通字符和11个元字符:
字符 | 匹配范围 | 案例 | 字符串 |
---|---|---|---|
普通字符 | 匹配自身 | abc | abc |
. | 匹配任意 | 除换行符”\n”外的字符(在DOTALL模式中也能匹配换行符 | a.c |
\ | 转义字符,使后一个字符改变原来的意思 | a.c;a\c | a.c;a\c |
* | 匹配前一个字符0或多次 | abc* | ab;abccc |
+ | 匹配前一个字符1次或无限次 | abc+ | abc;abccc |
? | 匹配一个字符0次或1次 | abc? | ab;abc |
^ | 匹配字符串开头。在多行模式中匹配每一行的开头 | ^abc | abc |
$ | 匹配字符串末尾,在多行模式中匹配每一行的末尾 | abc$ | abc |
| | 或。匹配左右表达式任意一个,从左到右匹配,如果|没有包括在()中,则它的范围是整个正则表达式 | abc | def|abc|def |
{} {m} | 匹配前一个字符m次,{m,n}匹配前一个字符m至n次,若省略n,则匹配m至无限次 | ab{1,2}c | abc |
[] | 字符集。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。[^abc]表示取反,即非abc。所有特殊字符在字符集中都失去其原有的特殊含义。用\反斜杠转义恢复特殊字符的特殊含义。 | a[bcd] | eabeaceade |
() | 被括起来的表达式将作为分组,从表达式左边开始没遇到一个分组的左括号“(”,编号+1.分组表达式作为一个整体,可以后接数量词。表达式中的|仅在该组中有效。 | (abc){2} | a(123|456)c abcabc a456c |
这里需要强调一下反斜杠\的作用:
- 反斜杠后边跟元字符去除特殊功能;(即将特殊字符转义成普通字符)
- 反斜杠后边跟普通字符实现特殊功能;(即预定义字符)
- 引用序号对应的字组所匹配的字符串。