Python常见序列详解
2017-03-19 00:31
176 查看
一、Python中序列的分类
常见序列类型包括字符串(普通字符串和unicode字符串),列表和元组.所谓序列,即成员有序排列,可通过下标访问.二、Python序列通用操作
下面我们将分别以字符串、列表和元组为例来说明对序列的操作索引
序列中的元素都是有序的、拥有自己编号(从0开始),我们可以通过索引得到序列中对应的元素:
索引也可以为负值,负数索引表示从右往左开始计数,最后一个元素索引为-1,倒数第二为-2,以此类推.
>>> s = 'abcdefg' >>> s[0] 'a' >>> s[1] 'b' >>> s[-1] 'g' >>> >>> l = [1,2,3,4,5,6,7] >>> l[4] 5 >>> l[0] 1 >>> l[-1] 7 >>> >>> t = (1,2,3,4,5,6,7) >>> t[0] 1 >>> t[-1] 7 >>> t[4] 5
2. 切片(分片)
使用索引可以获取单个元素,使用分片可以获取序列中指定范围内的元素.切片操作符[:]/[::]
obj[start_index:end_index] 表示获取从start_index开始到end_index-1结束所有索引对应的元素
切片中冒号左边索引对应的元素晚于右边索引对应元素出现时,返回结果是[]
>>> l [1, 2, 3, 4, 5, 6, 7] >>> >>> l[0:5] [1, 2, 3, 4, 5] >>> l[4:6] [5, 6] >>> l[2:2] [] >>> l[-3:-1] [5, 6] >>> l[-1:-3] [] >>> s 'abcdefg' >>> s[1:2] 'b'
obj[:end_index] 表示获取从0开始到end_index-1结束所有索引对应的元素
obj[start_index:] 表示获取start_index对应的元素以及后面所有的元素
obj[:] 表示获取所有的元素
>>> l[:5] [1, 2, 3, 4, 5] >>> l[2:] [3, 4, 5, 6, 7] >>> l[-2:] [6, 7] >>> l[:-3] [1, 2, 3, 4] >>> l[:] [1,2,3,4,5,6,7] >>> s[:5] 'abcde' >>> s[1:] 'bcdefg' >>> s[1::2] 'bdf'
[start_index:end_index:step] (step>0)表示从start_index索引对应的元素开始每step个元素取出来一个,直到取到end_index对应的元素结束(step默认为1)
>>> ll[0:9:] [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> ll[0:9:1] [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> ll[0:9:2] [1, 3, 5, 7, 9] >>> ll[::4] [1, 5, 9] >>> s[::-2] 'geca' >>>
[start_index:end_index:step] (step<0)表示从右到左反向提取元素,即从start_index索引对应的元素开始反向每step个元素取出来一个,直到取到end_index+1对应的元素结束.
此时start_index对应的元素要晚于end_index对应的元素出现,否则返回[]
>>> ll[0:6:-2] [] >>> ll[9:6:-2] [10, 8] >>> ll[6:9:-2] [] >>> ll[::-1] [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] >>> ll[:2:-3] [10, 7, 4] >>> ll[9:2:-1] [10, 9, 8, 7, 6, 5, 4]
2. 加法
两种相同的序列才可以进行加法操作
>>> l1=[1,2,4] >>> l2=[4,5,6] >>> l3=['9','10'] >>> l1+l2 [1, 2, 4, 4, 5, 6] >>> l1+l3 [1, 2, 4, '9', '10'] >>> l1+'abcdefg' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate list (not "str") to list
3.乘法
>>> 'python'*2 'pythonpython' >>> [1,2,3,4,5]*2 [1, 2, 3, 4, 5, 1, 2, 3, 4, 5] >>> ('a','b')*2 ('a', 'b', 'a', 'b') >>>
4.成员资格
>>> s 'abcdefg' >>> t (1, 2, 3, 4, 5, 6, 7) >>> l [1, 2, 3, 4, 5, 6, 7] >>> >>> >>> if 'ab' in s and 'c' in s: ... print 'yes' ... else: ... print 'no' ... yes >>> if 5 in l and 6 in t: ... print 'yes' ... else: ... print 'no' ... yes >>> >>> if 10 in l: ... print 'yes' ... else: ... print 'no' ... no >>> 10 in t False >>> 3 in t True >>> 'a' in s True
4.最大值、最小值、长度
>>> len(s) 7 >>> len(l) 7 >>> len(t) 7 >>> max(s) 'g' >>> max(l) 7 >>> max(t) 7 >>> min(s) 'a' >>> min(l) 1 >>> min(t) 1
三、列表(list)
列表和字符串、元组最大的区别为列表可变,字符串和元祖不可变
1.list函数 创建列表
>>> s 'abcdefg' >>> t (1, 2, 3, 4, 5, 6, 7) >>> list(s) ['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>> list(t) [1, 2, 3, 4, 5, 6, 7]
2.通过赋值改变列表
>>> l [1, 2, 3, 4, 5, 6, 7] >>> >>> l[1], l[2] = 10, 100 >>> l [1, 10, 100, 4, 5, 6, 7]
3.删除列表元素
>>> l [1, 2, 3, 4, 5, 6, 7] >>> >>> l[1], l[2] = 10, 100 >>> l [1, 10, 100, 4, 5, 6, 7]
>>>
>>> del l[0]
>>> l
[10, 100, 4, 5, 6, 7]
>>> del l[3:]
>>> l
[10, 100, 4]
4.列表分片赋值
#赋值 >>> l=range(10) >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> l[:3] = 'abcdefg' >>> l ['a', 'b', 'c', 'd', 'e', 'f', 'g', 3, 4, 5, 6, 7, 8, 9] >>> l[:7] = 'xy' >>> l ['x', 'y', 3, 4, 5, 6, 7, 8, 9] >>> >>> l=range(10) >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> l[:3] = ['x','yy'] >>> l ['x', 'yy', 3, 4, 5, 6, 7, 8, 9] >>> #插入 >>> l=range(10) >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> l[2:2]=[u'在第三个元素插入'] >>> l [0, 1, u'\u5728\u7b2c\u4e09\u4e2a\u5143\u7d20\u63d2\u5165', 2, 3, 4, 5, 6, 7, 8, 9] >>> #删除 >>> l=range(10) >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> l[1:4] = '' #等价于del l[1:4] >>> l [0, 4, 5, 6, 7, 8, 9] >>> l=range(10) >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> l[1:4] = [] >>> l [0, 4, 5, 6, 7, 8, 9] >>>
5.列表方法
append 在列表尾部增加元素
>>> l=[1,2,3,4] >>> l.append(5) >>> l.append(['acb']) >>> l [1, 2, 3, 4, 5, ['acb']]
count统计元素出现的个数
>>> l [1, 2, 3, 2, 12, 3, 53, 1, 2] >>> for i in l: ... print i,'-->',l.count(i) ... 1 --> 2 2 --> 3 3 --> 2 2 --> 3 12 --> 1 3 --> 2 53 --> 1 1 --> 2 2 --> 3 #元祖乱入-----> >>> t (1, 2, 3, 4) >>> for i in t: ... print i,'-->',t.count(i) ... 1 --> 1 2 --> 1 3 --> 1 4 --> 1
extend扩展原有列表
貌似列表的加法也可以"扩展列表"实际上"+"只是生成了一个新的列表,被连接的两个列表均没有改变,extend体现了列表的可变性
>>> l=range(5) >>> l [0, 1, 2, 3, 4] >>> l_add = [5,6,7,8] >>> l.extend(l_add) >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8] >>> >>> l+l_add [0, 1, 2, 3, 4, 5, 6, 7, 8, 5, 6, 7, 8] >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8]
[b]index找出某一元素第一次出现位置的索引 [/b]
>>> l [0, 1, 2, 3, 4, 5, 6, 7, 8] >>> l.index(3) 3 >>> l=[1,2,1,2,2,1] >>> l.index(2) 1
[b]insert(index,obj)将obj插入列表index索引前面[/b][b] [/b]
>>> l [1, 2, 1, 2, 2, 1] >>> l.insert(0,'first') >>> l ['first', 1, 2, 1, 2, 2, 1] >>> l.insert(-1,'end') >>> l ['first', 1, 2, 1, 2, 2, 'end', 1] >>> l.insert(3,'cc') >>> l ['first', 1, 2, 'cc', 1, 2, 2, 'end', 1] >>>
[b]pop(index)移除列表中index索引对应的元素,默认inex=-1[/b]
>>> l ['first', 1, 2, 'cc', 1, 2, 2, 'end', 1] >>> l.pop() 1 >>> l ['first', 1, 2, 'cc', 1, 2, 2, 'end'] >>> l.pop(2) 2 >>> l ['first', 1, 'cc', 1, 2, 2, 'end']
[b]rmove(obj)移除列表中匹配到obj的第一个元素[/b]
>>> l ['first', 1, 'cc', 1, 2, >>> l.remove(1) >>> l ['first', 'cc', 1, 2, 2]
[b]reverse转置列表[/b]
>>> l ['first', 'cc', 1, 2, 2] >>> l.reverse() >>> l [2, 2, 1, 'cc', 'first']
[b]sort给列表排序[/b]
>>> l [2, 2, 1, 'cc', 'first'] >>> l.sort() >>> l [1, 2, 2, 'cc', 'first'] >>> l.reverse() >>> l ['first', 'cc', 2, 2, 1] >>> sorted(l) [1, 2, 2, 'cc', 'first'] >>> l ['first', 'cc', 2, 2, 1] >>>
四、元组(tuple)
不可变序列
1.创建元组
>>> t1=(1,2,3) >>> t2=1,2,3, >>> t3='a', >>> t1 (1, 2, 3) >>> t2 (1, 2, 3) >>> t3 ('a',) #创建有一个元素的元组必须有逗号 >>> single_tuple=(2) >>> single_tuple 2 >>> single_tuple=(2,) >>> single_tuple (2,) >>>
2.touple函数
>>> tuple([1,2,3]) (1, 2, 3) >>> tuple('abc') ('a', 'b', 'c') >>> tuple((1,2,3)) (1, 2, 3)
[b] 3.元组方法[/b]
count
index
五、字符串(不可变序列)
1.字符换基本操作
参见上面有关序列的操作.
2.格式化字符串
>>> print 'price:%s'%123 price:123 >>> print u'宽度示例:%f'%3.145926 宽度示例:3.145926 >>> print u'宽度精度示例:%16.2f'%3.145926 字段宽度和精度: 3.14 >>> print u'0可以填充不足位数:%16.2f'%3.145926 0可以填充不足位数: 3.14 >>> print u'0可以填充不足位数:%016.2f'%3.1415926 0可以填充不足位数:0000000000003.14 >>> print u'-表示左对齐:%10.2f'%3.1415926 -表示左对齐: 3.14 >>> >>> print u'-表示左对齐:%-10.2f'%3.1415926 -表示左对齐:3.14 >>> print u'空格表示正数前面加空格:% d'%-10+'\n'+u'空格表示正数前面加空格:% d'%5 空格表示正数前面加空格:-10 空格表示正数前面加空格: 5 >>> print u'空格表示正数前面加空格:%d'%-10+'\n'+u'空格表示正数前面加空格:%d'%5 空格表示整数前面加空格:-10 空格表示整数前面加空格:5 >>> print u'+表示无论正负都带着正负号:%+d'%-10+'\n'+u'+表示无论正负都带着正负号:%+d'%5 +表示无论正负都带着正负号:-10 +表示无论正负都带着正负号:+5 >>> print u'+表示无论正负都带着正负号:%+d'%-10+'\n'+u'+表示无论正负都带着正负号:%+d'%5 +表示无论正负都带着正负号:-10 +表示无论正负都带着正负号:+5
3.常用字符串方法
参考菜鸟教程关于字符串讲解
string.capitalize() 把字符串的第一个字符大写,其他小写 >>> s 'aJJKbcefzxwu' >>> s.capitalize() 'Ajjkbcefzxwu' string.center(width) 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 >>> s.center(20) ' aJJKbcefzxwu ' string.count(str, beg=0, end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 >>> s.count('J') 2 string.decode(encoding='UTF-8', errors='strict') 以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除 非 errors 指 定 的 是 'ignore' 或 者'replace' string.encode(encoding='UTF-8', errors='strict') 以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace' string.endswith(obj, beg=0, end=len(string)) 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. >>> s.endswith('q') False string.find(str, beg=0, end=len(string)) 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 >>> s.find('J') 1 >>> string.index(str, beg=0, end=len(string)) 跟find()方法一样,只不过如果str不在 string中会报一个异常. >>> s.index('q') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: substring not found >>> s.index('a') 0 string.isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False >>> s.isalnum() True >>> ss='2345' >>> ss.isalnum() True >>> '3232fsfsdf'.isalnum() True >>> sss="12_45" >>> sss.isalnum() False string.isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False >>> sss.isal sss.isalnum( sss.isalpha( >>> sss.isalpha() False >>> ss.isalpha() False >>> s.isalpha() True string.isdigit() 如果 string 只包含数字则返回 True 否则返回 False. >>> sss.isdigit() False >>> ss.isdigit() True >>> s.isdigit() False string.islower() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False >>> ssss='123abc' >>> ssss.islower() True string.isspace() 如果 string 中只包含空格,则返回 True,否则返回 False. >>> ' '.isspace() True >>> '1 '.isspace() False string.istitle() 如果 string 是标题化的(见 title())则返回 True,否则返回 False >>> 'Tjksskd'.istitle() True >>> 'Tjkss2kd'.istitle() False >>> 'Tjksskd'.istitle() True >>> 'TjkssFkd'.istitle() False string.isupper() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False >>> 'AAAA_2323'.isupper() True >>> 'AAAAe_2323'.isupper() False string.join(seq) 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 >>> '-'.join(['1','2','3','4']) '1-2-3-4' string.ljust(width) 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 string.rjust(width) 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串 >>> s.ljust(20) 'aJJKbcefzxwu ' >>> s.rjust(20) ' aJJKbcefzxwu' >>> s.center(20) ' aJJKbcefzxwu ' string.lower() 转换 string 中所有大写字符为小写. >>> 'AAAAbbbb'.lower() 'aaaabbbb' >>> 'AAAAbbb12b'.lower() 'aaaabbb12b' string.lstrip() 截掉 string 左边的空格 string.rstrip() 删除 string 字符串末尾的空格. string.strip([obj]) 在 string 上执行 lstrip()和 rstrip() >>> ' fafsafs '.lstrip() 'fafsafs ' >>> ' fafsafs '.rstrip() ' fafsafs' >>> ' fafsafs '.strip() 'fafsafs' max(str) 返回字符串 str 中最大的字母。 min(str) 返回字符串 str 中最小的字母。 >>> max(s) 'z' >>> min(s) 'J' string.rfind(str, beg=0,end=len(string) ) 类似于 find()函数,不过是从右边开始查找. >>> s 'aJJKbcefzxwu' >>> s.rfind('J') 2 string.rindex( str, beg=0,end=len(string)) 类似于 index(),不过是从右边开始. string.split(str="", num) 以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num次 >>> s2.split('-',3) ['a', 'b', 'c', 'd-e-f'] >>> s2.split('-',1) ['a', 'b-c-d-e-f'] string.splitlines(keepends=False) 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 >>> test='a bc d\nfsfe\roopq' >>> test.splitlines() ['a bc d', 'fsfe', 'oopq'] >>> test.splitlines(True) ['a bc d\n', 'fsfe\r', 'oopq'] >>> string.startswith(obj, beg=0,end=len(string)) 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查. string.swapcase() 翻转 string 中的大小写 >>> 'aAbBcC'.swapcase() 'AaBbCc' string.title() 返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) >>> 'aAbBcC'.title() 'Aabbcc' string.upper() 转换 string 中的小写字母为大写 >>> 'a12bcMM'.upper() 'A12BCMM' string.zfill(width) 返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0 >>> s 'aJJKbcefzxwu' >>> s.zfill(30) '000000000000000000aJJKbcefzxwu'
[b] [/b]
相关文章推荐
- Python常见数据结构详解
- Python常见数据结构详解
- Python单体模式的几种常见实现方法详解
- Python - 序列(sequence) 详解 及 代码
- Python中序列的修改、散列与切片详解
- 详解python中executemany和序列的使用方法
- python魔法方法-自定义序列详解
- Python序列操作实例详解
- Python序列操作实例详解
- Python常见数据结构详解
- Python常见数据结构详解
- python魔法方法-自定义序列详解
- python时间日期函数与利用pandas进行时间序列处理详解
- Python常见数据结构详解
- Python and django(四)--详解python中的数字和序列
- Python and django(四)--详解python中的数字和序列
- Python_序列对象内置方法详解_String
- Python语言常见异常错误类型详解
- Python学习(三)---常见类型转换、数值操作、序列操作
- python魔法方法-自定义序列详解