Python常见序列详解
一、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
>>> s[::-1]
'gfedcba'
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]
[]
- 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=['','']
>>> l1+l2
[1, 2, 4, 4, 5, 6]
>>> l1+l3
[1, 2, 4, '', '']
>>> 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]
- index找出某一元素第一次出现位置的索引
>>> 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
- insert(index,obj)将obj插入列表index索引前面
>>> 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]
>>>
- pop(index)移除列表中index索引对应的元素,默认inex=-1
>>> 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']
- rmove(obj)移除列表中匹配到obj的第一个元素
>>> l
['first', 1, 'cc', 1, 2,
>>> l.remove(1)
>>> l
['first', 'cc', 1, 2, 2]
- reverse转置列表
>>> l
['first', 'cc', 1, 2, 2]
>>> l.reverse()
>>> l
[2, 2, 1, 'cc', 'first']
- sort给列表排序
>>> 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)
3.元组方法
- 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'
Python常见序列详解的更多相关文章
- Python初学者常见错误详解
Python初学者常见错误详解 0.忘记写冒号 在 if.elif.else.for.while.class.def 语句后面忘记添加 “:” if spam == 42 print('Hello ...
- (转)python collections模块详解
python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...
- 28.Python list列表详解
在实际开发中,经常需要将一些(不只一个)数据暂储起来,以便将来使用.说到这里,一些读者可能知道或听说过数组,它就可以把多个数据挨个存储到一起,通过数组下标可以访问数组中的各个元素.但使用数组存储数据有 ...
- 《python开发技术详解》|百度网盘免费下载|Python开发入门篇
<python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby 内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...
- Python 字符串方法详解
Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息. ...
- Python开发技术详解(视频+源码+文档)
Python, 是一种面向对象.直译式计算机程序设计语言.Python语法简捷而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结 ...
- Python字符编码详解,str,bytes
什么是明文 “明文”是可以是文本,音乐,可以编码成mp3文件.明文可以是图像的,可以编码为gif.png或jpg文件.明文是电影的,可以编码成wmv文件.不一而足. 什么是编码?把明文变成计算机语言 ...
- python协程详解
目录 python协程详解 一.什么是协程 二.了解协程的过程 1.yield工作原理 2.预激协程的装饰器 3.终止协程和异常处理 4.让协程返回值 5.yield from的使用 6.yield ...
- 转2:Python字符编码详解
1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有 ...
随机推荐
- >/dev/null 2>&1的作用
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null" 2 表示stderr标准错误 &am ...
- intent 启动activity、service的方法
1.通过intent启动service. 通过传递一个Intent对象至Context.startService()将启动一个服务(或给予正在运行的服务以一个新的指令).Android调用服务的onS ...
- AndroidManifest.xml配置
AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅.下面是一个标准的AndroidManifest.xm ...
- SpringMVC请求使用@PathVariable获取文件名称并且文件名中存在.导致路径被截取的问题
在SpringMVC中,当使用@pathVariable通过Get请求获取路径名称时,如果路径名称上存在小数点,则获取不到小数点后面的内容,会被Spring截取. 比如我获取某一文件,路径是local ...
- RabbitMQ(一):Windows下RabbitMQ安装
1.Windows下安装RabbitMQ需要以下几个步骤 (1):下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erlang. ...
- mysql explain22222 system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. .使用explain语句去查看分析结果 如explain ...
- void bind(String sName,Object object);――绑定:把名称同对象关联的过程
void bind(String sName,Object object);――绑定:把名称同对象关联的过程 void rebind(String sName,Object object);――重新绑 ...
- Quartz定时任务学习(三)属性文件和jar
以下是我在应用的的一个基本配置: #---------调度器属性----------------org.quartz.scheduler.instanceName = TestSchedulerorg ...
- Failed to load the JNI shared library jvm.dl
. 原因1:该目录下jvm.dll不存在 2 解决办法:重新安装jdk或者jre并配置好环境变量.copy一个jvm.dll放在该目录下 3 原因2:eclipse的版本与jdk或者jre版本不一致 ...
- firefox(火狐)怎么关闭鼠标拖拽搜索
工具-附加组件-卸载<附加组件管理器> 即可. 这玩意真心坑爹,起这个名字的人绝对是吃屎了,这名字怎么和鼠标拖拽混到一起的 !!! 关键字:火狐:鼠标:鼠标拖拽:鼠标手势:关闭