排列、组合、生成器、正则表达式

2018-11-14  本文已影响23人  夏威夷的芒果

从 n 个不同元素中取出 m (m <n)个元素,按照一定的顺序排成一列,叫做从 n 个元素中取出 m 个元素的一个排列(Arrangement)。
特别地,当 m=n 时,这个排列被称作全排列(Permutation)

import itertools

mylist=list(itertools.permutations([1,2,3,4],2))  #有序地,4个里面取出来2个
print(mylist)
print(len (mylist))

运行结果

[(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3)]
12
import itertools
mylist=list(itertools.combinations([1,2,3,4],2))     #无序地,4个里面取出来2
print(mylist)
print(len (mylist))

运行结果

[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
6

使用生成器可以减小内存。

正则表达式

概述、match函数

search函数

findall函数

匹配单个字符与数字

锚字符、边界字符

匹配多个字符

切分字符串

finditer函数

sub的字符串替换修改

match和分组

编译减小重编译成本

常见的正则形式:

re_qq= re.compile(r"\d{5,10}$") 
print(re_qq.match("8765432"))
#字母开头、中间是任意字母数字或者下划线
re_ mail = re.compile(r"^\w(_|\w)*@\w+\.\w{1,3}$")
print (re_ mail.search ("a_12@qq.com"'))

手机

re_mobile = re.compile(r"^1[34578]\d{9}$")
print(re_mobile.search("13765765432"))

座机

re_phone = re.compile(r"^0[1-9]\d{1,2}-\d{8}$")
print(re_phone.search("010-12343673"))

用户名

#0-15位字母数字
re_user = re.compile(r"^[a-zA-Z][a-zA-Z0-9]{0,15}$") 
print(re_user.search("sunck"))

密码

re_passwd = re.compile(r"^[a-zA-Z0-9].{5,15}$")
print(re_passwd.search("1fjiehf&%^"))

生日

re_birthday = re.compile(r"^((18\d{2})|(19\d{2})|(20[0-1]\d))-(1[0-2]|0[1-9])-([0][1-9]|[1-2][0-9]|3[0-1])$") 
print(re_birthday.search("1813-09-12"))

IP地址

re_ip = re.compile(r"^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$") 
print(re_ip.search("1.4.34.34"))
上一篇下一篇

猜你喜欢

热点阅读