pair函数python python pairs

Python正则问题一例1.这里用到pair函数python了反引用( back reference )
.*(.).*\1 中 .* 表示匹配任意多个字符(可以为0个字符), (.) 表示匹配任意一个字符, .*任意多字符, \1 表示匹配前面(.)捕获到pair函数python的内容, 也就是说, 匹配一对字母( 记为 A ), A之间可以有任意多个字符, 且第一个A之前可以有任意多个字符(或者没有字符)
2. 这里涉及正则匹配pair函数python的匹配原则, 手册上关于 re.groups 最后说的很清楚: 如果有多个匹配到的组,则返回最后一个(If a group is contained in a part of the pattern that matched multiple times,
the last match is returned.).
因此re.match(r".*(.).*\1", "7676k").groups() 可以匹配到7和6, 返回最后一个6
Python判断列表是否已排序的各种方法及其性能本节判断列表排序的函数名格式为IsListSorted_XXX() 。为简洁起见pair函数python , 除代码片段及其输出外,一律以_XXX()指代 。
2.1 guess
def IsListSorted_guess(lst):
listLen = len(lst)if listLen = 1:return True
#由首个元素和末尾元素猜测可能的排序规则
if lst[0] == lst[-1]: #列表元素相同
for elem in lst:if elem != lst[0]: return False
elif lst[0]lst[-1]: #列表元素升序
for i, elem in enumerate(lst[1:]):if elemlst[i]: return False
else: #列表元素降序
for i, elem in enumerate(lst[1:]):if elemlst[i]: return False
return True
_guess()是最通用的实现,几乎与语言无关 。值得注意的是,该函数内会猜测给定列表可能的排序规则,因此无需外部调用者指明排序规则 。
2.2 sorted
def IsListSorted_sorted(lst):
return sorted(lst) == lst or sorted(lst, reverse=True) == lst
_sorted()使用Python内置函数sorted() 。由于sorted()会对未排序的列表排序,_sorted()函数主要适用于已排序列表 。
若想判断列表未排序后再对其排序,不如直接调用列表的sort()方法 , 因为该方法内部会判断列表是否排序 。对于已排序列表 , 该方法的时间复杂度为线性阶O(n)——判断为O(n)而排序为O(nlgn) 。
2.3 for-loop
def IsListSorted_forloop(lst, key=lambda x, y: x = y):
for i, elem in enumerate(lst[1:]):#注意,enumerate默认迭代下标从0开始
【pair函数python python pairs】if not key(lst[i], elem): #if elemlst[i]更快,但通用性差
return False
return True
无论列表是否已排序,本函数的时间复杂度均为线性阶O(n) 。注意,参数key表明缺省的排序规则为升序 。
2.4 all
def IsListSorted_allenumk(lst, key=lambda x, y: x = y):
return all(key(lst[i], elem) for i, elem in enumerate(lst[1:]))import operatordef IsListSorted_allenumo(lst, oCmp=operator.le):
return all(oCmp(lst[i], elem) for i, elem in enumerate(lst[1:]))def IsListSorted_allenumd(lst):
return all((lst[i] = elem) for i, elem in enumerate(lst[1:]))def IsListSorted_allxran(lst, key=lambda x,y: x = y):
return all(key(lst[i],lst[i+1]) for i in xrange(len(lst)-1))def IsListSorted_allzip(lst, key=lambda x,y: x = y):
from itertools import izip #Python 3中zip返回生成器(generator) , 而izip被废弃
return all(key(a, b) for (a, b) in izip(lst[:-1],lst[1:]))
lambda表达式与operator运算符速度相当,前者简单灵活,后者略为高效(实测并不一定) 。但两者速度均不如列表元素直接比较(可能存在调用开销) 。亦即,_allenumd()快于_allenumo()快于_allenumk() 。
若使用lambda表达式指示排序规则 , 更改规则时只需要改变x和y之间的比较运算符pair函数python;若使用operator模块指示排序规则 , 更改规则时需要改变对象比较方法 。具体地,lt(x, y)等效于xy,le(x, y)等效于x = y , eq(x, y)等效于x == y,ne(x, y)等效于x != y,gt(x, y)等效于xy,ge(x, y)等效于x = y 。例如,_allenumo()函数若要严格升序可设置oCmp=operator.lt 。

推荐阅读