Python常见序列详解

一、Python中序列的分类



  常见序列类型包括字符串(普通字符串和unicode字符串),列表和元组.所谓序列,即成员有序排列,可通过下标访问. 

 

二、Python序列通用操作



  下面我们将分别以字符串、列表和元组为例来说明对序列的操作

  1. 索引

  序列中的元素都是有序的、拥有自己编号(从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 tFalse>>> 3 in tTrue>>> ‘a‘ in sTrue

  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 --> 12 --> 13 --> 14 --> 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_tuple2>>> 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.isalsss.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‘

  

时间: 2024-11-18 01:32:45

Python常见序列详解的相关文章

Python字符编码详解(转)

1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号.不过ASCII只用到了其中的一半(\x80以下),这也是MBCS得以实现的基础. 1.2. MBCS 然而计算机世界里很快就有了其他语言,单字节的ASCII已无法满足需求.后来每个语言就制定了一套自己的编码,由于单字节

Python 字符串方法详解

Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息. 在编程中,几乎90% 以上的代码都是关于整数或字符串操作,所以与整数一样,Python 的字符串实现也使用了许多拿优化技术,使得字符串的性能达到极致.与 C++ 标准库(STL)中的 std::string 不同,python 字符串集合了许多字符串相关的算法,以方法成员的方式提供接口,使用起来非常方便. 字符

python之struct详解

python之struct详解 2018-05-23 18:20:29 醉小义 阅读数 20115更多 分类专栏: python 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_30638831/article/details/80421019 用处 按照指定格式将Python数据转换为字符串,该字符串为字节流,如网络传输时,不能传输int,此时先将int转化为字节流,然后再发送;

oracle 序列 详解

序列: 是oacle提供的用于产生一系列唯一数字的数据库对象. l  自动提供唯一的数值 l  共享对象 l  主要用于提供主键值 l  将序列值装入内存可以提高访问效率 创建序列: 1.  要有创建序列的权限 create sequence 或 create any sequence 2.  创建序列的语法 CREATE SEQUENCE sequence  //创建序列名称        [INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1

Python中dict详解

yangyzh Python中dict详解 python3.0以上,print函数应为print(),不存在dict.iteritems()这个函数. 在python中写中文注释会报错,这时只要在头部加上# coding=gbk即可 #字典的添加.删除.修改操作dict = {"a" : "apple", "b" : "banana", "g" : "grape", "o&qu

android WebView详解,常见漏洞详解和安全源码

这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 由于博客内容长度,这次将分为上下两篇,上篇详解 WebView 的使用,下篇讲述 WebView 的漏洞和坑,以及修复源码的解析. 下篇:android WebView详解,常见漏洞详解和安全源码(下) 转载请注明出处:http://blog.csdn.net/self_study/article/details/54928371. 对技术感兴趣的同鞋加群 54

android WebView详解,常见漏洞详解和安全源码(下)

上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑. 上篇:android WebView详解,常见漏洞详解和安全源码(上) 转载请注明出处:http://blog.csdn.net/self_study/article/details/55046348 对技术感兴趣的同鞋加群 544645972 一起交流. WebView 常见漏洞 WebView 的漏洞也是不少,列举一些常见的漏洞,实时更新,如果有其他的常见漏洞,知会一下我-- WebView

python开发技术详解(二)

文章目录: 数据类型 数据类型 a=1 b=2 print id(a) print id(b) Out[1]: 163578032 Out[2]: 163578032 python开发技术详解(二)

MDK常见错误详解集合

错误代码及错误信息 错误释义 error 1: Out of memory 内存溢出 error 2: Identifier expected 缺标识符 error 3: Unknown identifier 未定义的标识符 error 4: Duplicate identifier 重复定义的标识符 error 5: Syntax error 语法错误 error 6: Error in real constant 实型常量错误 error 7: Error in integer consta