01Python内置函数_集合操作类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01Python内置函数_集合操作类相关的知识,希望对你有一定的参考价值。

basestring

basestring()
说明:basestringstrunicode的超类(父类),也是抽象类,
因此不能被调用和实例化,但可以被用来判断一个对象是否为str或者unicode的实例,
isinstance(obj, basestring)
等价于isinstance(obj, (str, unicode));
版本:python2.3版本以后引入该函数,兼容python2.3以后python2各版本。
注意:python3中舍弃了该函数,所以该函数不能在python3中使用。
1 >>> isinstance("Hello world", str)
2 True
3 >>> isinstance("Hello world", basestring)
4 True
5 >>> isinstance(u"你好", unicode)
6 True
7 >>> isinstance(u"你好", basestring)
8 True

chr

chr(i)
返回整数i对应的ASCII字符

1 >>> chr(97)
2 a
3 >>> chr(65)
4 A

dict

dict([arg])
创建数据字典

1 >>> a = dict(one = 1,two = 2,three = 3)
2 >>> print a
3 {three: 3, two: 2, one: 1}
4 >>> print dict(zip([spring,summer,automn,winter],range(4)))
5 {spring: 0, winter: 3, automn: 2, summer: 1}

enumerate

enumerate(sequence [, start = 0])
返回一个可枚举的对象,该对象的next()方法将返回一个tuple

 1 >>> t = enumerate([spring,summer,automn,winter],1)
 2 >>> t.next()
 3 (1, spring)
 4 >>> t.next()
 5 (2, summer)
 6 >>> t.next()
 7 (3, automn)
 8 >>> t.next()
 9 (4, winter)
10 >>> for i,season in enumerate([spring,summer,automn,winter],2):
11         print i,season
12
13 
14 2 spring
15 3 summer
16 4 automn
17 5 winter
18 >>> for season in enumerate([spring,summer,automn,winter],3):
19         print season
20 
21 (3, spring)
22 (4, summer)
23 (5, automn)
24 (6, winter)

format

format(value [, format_spec])
本函数把值value按format_spec的格式来格式化,
然而函数解释format_spec是根据value的类型来决定的,不同的类型有不同的格式化解释。
当参数format_spec为空时,本函数等同于函数str(value)的方式。

其实本函数调用时,是把format(value, format_spec)的方式转换为
type(value).__format__(format_spec)方式来调用,
因此在value类型里就查找方法__format__(),
如果找不到此方法,就会返回异常TypeError。

其中format_spec的编写方式如下形式:
format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]

fill        ::=  <any character>

align       ::=  "<" | ">" | "=" | "^"

sign        ::=  "+" | "-" | " "

width       ::=  integer

precision   ::=  integer

type        ::=  "b"|"c"|"d"|"e"|"E"|"f"|"F"|"g"|"G"|"n"|"o"|"s"|"x"|"X"|"%"
fill是表示可以填写任何字符。

align是对齐方式,<是左对齐, >是右对齐,^是居中对齐。

sign是符号, +表示正号, -表示负号。

width是数字宽度,表示总共输出多少位数字。

precision是小数保留位数。

type是输出数字值是的表示方式,比如b是二进制表示;比如E是指数表示;比如X是十六进制表示。

 1 >>> print(format(2918))
 2 2918
 3 >>> print(format(0x500,X))
 4 500
 5 >>> print(format(0x500,x))
 6 500
 7 >>> import math
 8 >>> print(format(math.pi,0=10))
 9 3.14159265359
10 >>> print(format(math.pi,0=20))
11 00000003.14159265359
12 >>> print(format(math.pi,E))
13 3.141593E+00
14 >>> print(format(math.pi,e))
15 3.141593e+00
16 >>> print(format(math.pi,05.3))
17 03.14
18 >>> print(format(math.pi,5.3))
19  3.14
20 >>> print(format(test,<20))
21 test                
22 >>> print(format(test,>20))
23                 test
24 >>> print(format(test,^20))
25         test        
26 >>> print(format(math.pi,0=+20))
27 +0000003.14159265359
28 >>> print(format(math.pi,0^+20))
29 000+3.14159265359000

iter

iter(o[, sentinel])
如果传递了第二个参数,则object必须是一个可调用的对象(如,函数)。
此时,iter创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用object。
如果__next__的返回值等于sentinel,则抛出StopIteration异常,否则返回下一个值。
 1 class counter:
 2 
 3      def __init__(self, _start, _end):
 4          self.start = _start
 5          self.end = _end
 6 
 7      def get_next(self):
 8          s = self.start
 9          if(self.start < self.end):
10               self.start += 1
11          else:
12              raise StopIteration
13 
14          return s

1 >>>c = counter(1, 5)
2 >>>iterator = iter(c.get_next, 3)
3 >>>print(type(iterator))
4 <class callable_iterator>
5 >>>for i in iterator: #当self.start = 3便停止
6     print(i)
7 
8 1
9 2

list

list([iterable])
将一个集合类转换为另外一个集合类

1 >>> print list(range(7))
2 [0, 1, 2, 3, 4, 5, 6]
3 >>> print list(hello world)
4 [h, e, l, l, o,  , w, o, r, l, d]

max

max(iterable[, args...][key])
函数是迭代对象iterable进行比较,找出最大值返回。
当key参数不为空时,就以key的函数对象为判断的标准。

>>> a1 = range(10)
>>> a2 = range(0,20,3)
>>> print max(a1)=%d%max(a1)
max(a1)=9
>>> print max(a2)=%d%max(a2)
max(a2)=18
>>> print max(1,2)
2
>>> print max(ah,bf,key=lambda x: x[1])
ah
>>> print max(a1,a2,key = lambda x: x[1])
[0, 3, 6, 9, 12, 15, 18]
>>> def comparator(x):
    return x[2]

>>> print max(ah2,bf3,key= comparator )
bf3

min

min(iterable[, args...][key])
函数是迭代对象iterable进行比较,找出最小值返回。
当key参数不为空时,就以key的函数对象为判断的标准。

 1 >>> a1 = range(10)
 2 >>> a2 = range(0,20,3)
 3 >>> print min(a1)=%d%min(a1)
 4 min(a1)=0
 5 >>> print min(a2)=%d%min(a2)
 6 min(a2)=0
 7 >>> print min(1,2)
 8 1
 9 >>> print min(ah,bf,key = lambda x: x[1])
10 bf
11 >>> print min(a1,a2,key = lambda x: x[1])
12 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
13 >>> def comparator(x):
14     return x[2]
15 
16 >>> print min(ah2,bf3,key=comparator)
17 ah2 

range

range([start], stop[, step])
产生一个序列,默认从0开始
start为起点,stop为终点(不包括在内),step为步长

1 >>> range(1,10,2)
2 [1, 3, 5, 7, 9]
3 >>> range(10,1,-2)
4 [10, 8, 6, 4, 2] 

set

set()
set对象实例化

 1 >>> set(add)
 2 set([a, d])
 3 >>> set(python).add(hello)
 4 >>> print set(python).add(hello)
 5 None
 6 >>> a = set(python)
 7 >>> a
 8 set([h, o, n, p, t, y])
 9 >>> a.add(hello)
10 >>> a
11 set([h, o, n, p, t, y, hello])
12 >>> a.update(python)
13 >>> a
14 set([h, o, n, p, t, y, hello])
15 >>> a.update(hello)
16 >>> a
17 set([e, h, l, o, n, p, t, y, hello])
18 >>> a.remove(hello)
19 >>> a
20 set([e, h, l, o, n, p, t, y])
21 >>> b = set(hello)
22 >>> b
23 set([h, e, l, o])
24 >>> a - b
25 set([y, p, t, n])
26 >>> a & b
27 set([h, e, l, o])
28 >>> a | b
29 set([e, h, l, o, n, p, t, y])
30 >>> a != b
31 True
32 >>> a == b
33 False
34 >>> b in a
35 False
36 >>> a in b
37 False
38 >>> c = set(hell)
39 >>> c in b
40 False
41 >>> b
42 set([h, e, l, o])
43 >>> c
44 set([h, e, l])
45 >>> h in c
46 True
47 >>> p in c
48 False

frozenset

frozenset([iterable])
产生一个不可变的set

 1 >>> a = frozenset(range(10))
 2 >>> a
 3 frozenset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
 4 >>> a.remove(0)
 5 
 6 Traceback (most recent call last):
 7   File "<pyshell#189>", line 1, in <module>
 8     a.remove(0)
 9 AttributeError: frozenset object has no attribute remove
10 >>> b = set(range(10))
11 >>> b
12 set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
13 >>> b.remove(1)
14 >>> b
15 set([0, 2, 3, 4, 5, 6, 7, 8, 9]) 

sorted


sorted(iterable[, cmp[, key[, reverse]]])
队集合排序
1.先说一下iterable,中文意思是迭代器。
Python的帮助文档中对iterable的解释是:iteralbe指的是能够一次返回它的一个成员的对象。
iterable主要包括3类:
第一类是所有的序列类型,比如list(列表)str(字符串)tuple(元组)。
第二类是一些非序列类型,比如dict(字典)file(文件)。
第三类是你定义的任何包含__iter__()或__getitem__()方法的类的对象。
2.Python帮助文档中对sorted方法的讲解:
sorted(iterable[,cmp,[,key[,reverse=True]]])
作用:Return a new sorted list from the items in iterable.
第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表(list)。
可选的参数有三个,cmp、key和reverse。
1)cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),
如果第一个参数小于第二个参数,返回一个负数;
如果第一个参数等于第二个参数,返回零;
如果第一个参数大于第二个参数,返回一个正数。默认值为None。
2)key指定一个接收一个参数的函数,
这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None。
3)reverse是一个布尔值。
如果设置为True,列表元素将被倒序排列。
通常来说,key和reverse比一个等价的cmp函数处理速度要快。
这是因为对于每个列表元素,cmp都会被调用多次,而key和reverse只被调用一次。
3.具体的用法如下:
1)排序基础
一个简单的升序排列很简单-只需要调用sorted()函数即可。 
这个函数返回一个新的排序列表。:
1 >>> sorted([5,2,3,1,4])
2 [1,2,3,4,5]
你也可以使用list的list.sort()方法。
这个方法会修改原始的list(返回值为None)。
通常这个方法不如sorted()方便-如果你不需要原始的list,list.sort()方法效率会稍微高一些。
1 >>> a=[5,2,3,1,4]
2 >>> a.sort()
3 >>> a
4 [1,2,3,4,5]
另一个区别在于list.sort()方法只为list定义。
而sorted()函数可以接收任何的iterable。
1 >>> sorted({1: D, 2: B, 3: B, 4: E, 5: A}) 
2 [1, 2, 3, 4, 5]
2)Key Functions(关键字函数)
从Python2.4开始,list.sort()和sorted()方法都添加了一个key参数来说明一个函数,
这个函数在做比较之前会对list中的每个元素进行调用。
例如,这里是一个大小写不敏感的字符串比较:
>>> sorted("This is a test string from Andrew".split(), key=str.lower) 
[a, Andrew, from, is, string, test, This]
>>> sorted("This is a test string from Andrew".split(), key=str.upper)
[a, Andrew, from, is, string, test, This]
key的值应该是一个函数,这个函数接收一个参数并且返回一个用于比较的关键字。
这种技术比较快,原因在于对每个输入记录,这个函数只会被调用一次。
对复杂对象的比较通常是使用对象的切片作为关键字。例如:
1 >>> student_tuples = [(john, A, 15),(jane, B, 12),(dave, B, 10),]
2 >>> sorted(student_tuples, key=lambda student: student[2]) 
3 [(dave, B, 10), (jane, B, 12), (john, A, 15)]
同样的技术适用于有named属性的对象。例如:
 1 >>> class Student:         
 2         def __init__(self, name, grade, age):
 3             self.name = name
 4             self.grade = grade
 5             self.age = age
 6         def __repr__(self):                 
 7             return repr((self.name, self.grade, self.age))  
 8 >>> student_objects=[Student(john,A,15),Student(jane,B,12),Student(dave,B,10),]
 9 >>> sorted(student_objects, key=lambda student: student.age)
10 [(dave, B, 10), (jane, B, 12), (john, A, 15)]
3)Operator Module Functions (Operator模块中的函数)
上面的key-function模式很常见,因此Python提供了方便的函数使得祖先函数更简单和快捷。
operator module有itemgetter,attrgetter,以及从Python2.6开始的methodcaller函数。
使用这些函数,上面的例子会变得更简单和快捷:
1 >>> from operator import itemgetter, attrgetter  
2 >>> sorted(student_tuples, key=itemgetter(2)) 
3 [(dave, B, 10), (jane, B, 12), (john, A, 15)]  
4 >>> sorted(student_objects, key=attrgetter(age)) 
5 [(dave, B, 10), (jane, B, 12), (john, A, 15)]
operator模块支持多级排序。例如先按成绩排序,再按年龄排序:
1 >>> sorted(student_tuples, key=itemgetter(1,2)) 
2 [(john, A, 15), (dave, B, 10), (jane, B, 12)]  
3 >>> sorted(student_objects, key=attrgetter(grade, age)) 
4 [(john, A, 15), (dave, B, 10), (jane, B, 12)]
4)升序和降序
list.sort()和sorted()都接收一个reverse参数。它是用于降序排序的标志。
例如,为了获得学生年龄的降序排序:
1 >>> sorted(student_tuples, key=itemgetter(2), reverse=True) 
2 [(john, A, 15), (jane, B, 12), (dave, B, 10)]  
3 >>> sorted(student_objects, key=attrgetter(age), reverse=True) 
4 [(john, A, 15), (jane, B, 12), (dave, B, 10)]
5)排序稳定性和复杂的排序 从Python2.2开始,排序都保证是稳定的。意思是当多个记录有相同的关键字时,它们原始的排序保留。
1 >>> data = [(red, 1), (blue, 1), (red, 2), (blue, 2)] 
2 >>> sorted(data, key=itemgetter(0)) 
3 [(blue, 1), (blue, 2), (red, 1), (red, 2)]
注意到两个‘blue‘的记录保留了它们原始的顺序,
因此(‘blue‘,1)保证在(‘blue‘,2)之前。  
这个好的特性能让你建立复杂的排序。
例如,将学生记录按成绩降序排序、按年两升序排列。先按年龄排序,再按成绩排序。
1 >>> s=sorted(student_objects,key=attrgetter(age)) 
2 >>> s
3 [(dave, B, 10), (jane, B, 12), (john, A, 15)]
4 >>> sorted(s,key=attrgetter(grade),reverse=True) 
5 [(dave, B, 10), (jane, B, 12), (john, A, 15)]
6 >>> sorted(s,key=attrgetter(grade),reverse=False)
7 [(john, A, 15), (dave, B, 10), (jane, B, 12)] 

str

str([object])
转换为string类型

 1 In [2]: S = str(abc)
 2 
 3 In [3]: S.
 4 S.capitalize S.find       S.isspace    S.partition  S.rstrip     S.translate
 5 S.center     S.format     S.istitle    S.replace    S.split      S.upper
 6 S.count      S.index      S.isupper    S.rfind      S.splitlines S.zfill
 7 S.decode     S.isalnum    S.join       S.rindex     S.startswith
 8 S.encode     S.isalpha    S.ljust      S.rjust      S.strip
 9 S.endswith   S.isdigit    S.lower      S.rpartition S.swapcase
10 S.expandtabs S.islower    S.lstrip     S.rsplit     S.title 
字符串中字符大小写的变换:
1 S.lower()   #小写
2 S.upper()   #大写
3 S.swapcase()   #大小写互换
4 S.capitalize()   #首字母大写
5 S.title()    #只有首字母大写,其余为小写,模块中没有这个方法 
字符串在输出时的对齐:
1 S.ljust(width,[fillchar])   
2 #输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格。
3 S.rjust(width,[fillchar])    #右对齐
4 S.center(width, [fillchar])    #中间对齐
5 S.zfill(width)   #把S变成width长,并在右对齐,不足部分用0补足 
字符串中的搜索和替换:
S.find(substr, [start, [end]])   
#返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1。
start和end作用就相当于在S[start:end]中搜索
S.index(substr, [start, [end]])   
#与find()相同,只是在S中没有substr时,会返回一个运行时错误
S.rfind(substr, [start, [end]])   
#返回S中最后出现的substr的第一个字母的标号,如果S中没有substr则返回-1,
也就是说从右边算起的第一次出现的substr的首字母标号
1 S.rindex(substr, [start, [end]])
2 S.count(substr, [start, [end]])    #计算substr在S中出现的次数
3 S.replace(oldstr, newstr, [count])    
4 #把S中的oldstar替换为newstr,count为替换次数。
这是替换的通用形式,还有一些函数进行特殊字符的替换
1 S.strip([chars])
2 #把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None
3 S.lstrip([chars])
4 S.rstrip([chars])
5 S.expandtabs([tabsize])   
6 #把S中的tab字符替换没空格,每个tab替换为tabsize个空格,默认是8个 
字符串的分割和组合:
S.split([sep, [maxsplit]]) 
#以sep为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符
S.rsplit([sep, [maxsplit]])
S.splitlines([keepends])
#把S按照行分割符分为一个list,keepends是一个bool值,如果为真每行后而会保留行分割符。
S.join(seq) #把seq代表的序列──字符串序列,用S连接起来 
字符串的mapping,这一功能包含两个函数:
1 String.maketrans(from, to) 
2 #返回一个256个字符组成的翻译表,其中from中的字符被一一对应地转换成to,所以from和to必须是等长的。
3 S.translate(table[,deletechars]) 
4 #使用上面的函数产后的翻译表,把S进行翻译,并把deletechars中有的字符删掉。
需要注意的是,如果S为unicode字符串,那么就不支持deletechars参数,可以使用把某个字符翻译为None的方式实现相同的功能。
此外还可以使用codecs模块的功能来创建更加功能强大的翻译表。
字符串还有一对编码和解码的函数:
1 S.encode([encoding,[errors]])
2 #其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支持。
errors默认值为"strict",意思是UnicodeError。
可能的值还有‘ignore‘, ‘replace‘, ‘xmlcharrefreplace‘, ‘backslashreplace‘ 
和所有的通过codecs.register_error注册的值。
这一部分内容涉及codecs模块,不是特明白
S.decode([encoding,[errors]])
字符串的测试函数,这一类函数在string模块中没有,这些函数返回的都是bool值:
S.startwith(prefix[,start[,end]]) 
#是否以prefix开头
S.endwith(suffix[,start[,end]]) 
#以suffix结尾
S.isalnum() 
#是否全是字母和数字,并至少有一个字符
S.isalpha() #是否全是字母,并至少有一个字符
S.isdigit() #是否全是数字,并至少有一个字符
S.isspace() #是否全是空白字符,并至少有一个字符
S.islower() #S中的字母是否全是小写
S.isupper() #S中的字母是否便是大写
S.istitle() #S是否是首字母大写的 
字符串类型转换函数,这几个函数只在string模块中有:
1 string.atoi(s[,base]) 
2 #base默认为10,如果为0,那么s就可以是012或0x23这种形式的字符串,
3 如果是16那么s就只能是0x23或0X12这种形式的字符串
4 string.atol(s[,base]) #转成long
5 string.atof(s[,base]) #转成float 

tuple

tuple([iterable])
生成一个tuple类型
1 >>> print tuple([1,2,3])
2 (1, 2, 3)
3 >>> print tuple((1,2,3))
4 (1, 2, 3)
5 >>> print tuple(hello)
6 (h, e, l, l, o

unichr

unichr(i)
返回给定int类型的unicode

1 >>> unichr(97)
2 ua
3 >>> unichr(65)
4 uA 

xrange

xrange([start], stop[, step])
xrange()函数与range()类似,但xrnage()并不创建列表,
而是返回一个xrange对象,它的行为与列表相似,
但是只在需要时才计算列表值,当列表很大时,这个特性能为我们节省内存
 1 >>> x=xrange(0,8)
 2 >>> print x
 3 xrange(8)
 4 >>> print x[0]
 5 0
 6 >>> print x[7]
 7 7
 8 >>> print x[8]
 9 Traceback (most recent call last):
10  File "<stdin>", line 1, in <module>
11 IndexError: xrange object index out of range
12 >>> x=range(0,8)
13 >>> print x
14 [0, 1, 2, 3, 4, 5, 6, 7]
15 >>> print x[0]
16 0
17 >>> print x[8]
18 Traceback (most recent call last):
19   File "<stdin>", line 1, in <module>
20 IndexError: list index out of range
21 range([start,] stop [,step])->list of integers

 

 


以上是关于01Python内置函数_集合操作类的主要内容,如果未能解决你的问题,请参考以下文章

Python面向对象编程02:深度认识类class

Python面向对象编程02:深度认识类class

python16_day03集合函数递归内置函数

python基础9 -----python内置函数

python内置方法

Python基础之内置函数