一、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
>>> 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常见序列详解的更多相关文章

  1. Python初学者常见错误详解

    Python初学者常见错误详解 0.忘记写冒号 在 if.elif.else.for.while.class.def 语句后面忘记添加 “:”   if spam == 42 print('Hello ...

  2. (转)python collections模块详解

    python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...

  3. 28.Python list列表详解

    在实际开发中,经常需要将一些(不只一个)数据暂储起来,以便将来使用.说到这里,一些读者可能知道或听说过数组,它就可以把多个数据挨个存储到一起,通过数组下标可以访问数组中的各个元素.但使用数组存储数据有 ...

  4. 《python开发技术详解》|百度网盘免费下载|Python开发入门篇

    <python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby  内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...

  5. Python 字符串方法详解

    Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息.        ...

  6. Python开发技术详解(视频+源码+文档)

    Python, 是一种面向对象.直译式计算机程序设计语言.Python语法简捷而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结 ...

  7. Python字符编码详解,str,bytes

    什么是明文 “明文”是可以是文本,音乐,可以编码成mp3文件.明文可以是图像的,可以编码为gif.png或jpg文件.明文是电影的,可以编码成wmv文件.不一而足. 什么是编码?把明文变成计算机语言 ...

  8. python协程详解

    目录 python协程详解 一.什么是协程 二.了解协程的过程 1.yield工作原理 2.预激协程的装饰器 3.终止协程和异常处理 4.让协程返回值 5.yield from的使用 6.yield ...

  9. 转2:Python字符编码详解

    1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有 ...

随机推荐

  1. C#微信公众号学习 - (一)测试账号申请

    主要分为两部分: 1.创建C#的项目,并发布, 2.微信填写发布的地址进行开发者验证. 一. VS环境为VS2017,创建项目时,自带的一些东西发布会导致各种错误,无奈,创建了空项目aspx窗体,如下 ...

  2. Eclipse没有 web Project 选项的解决办法

    装下插件即可.步骤如下: 选择 Help >Software Updates >Find and Install.这个选项会让您可以下载和安装 Web 工具,且无需转到 Web 站点. 选 ...

  3. 21. Merge Two Sorted Lists【easy】

    21. Merge Two Sorted Lists[easy] Merge two sorted linked lists and return it as a new list. The new ...

  4. 李洪强漫谈iOS开发[C语言-002]-开发概述程序的本质与简单执行过程

    李洪强iOS开发之应用程序的本质与简单执行过程 什么叫程序? 就是一段执行指令 程序的两个状态: 保存状态(保存到硬盘上)   运行状态(由CPU执行) 代码可以执行吗? CPU(中央处理器-> ...

  5. 如何给unity3d工程加入依赖的android工程

    最近在忙着接平台的事,需要接入各种各样的android平台sdk来发布.在接sdk的时候遇到了这样的一个情况,有点麻烦,所以纪录一下. 有些sdk的接入是提供jar包,这样的可以简单地将jar包制作成 ...

  6. script 标签里的 async 和 defer

    无 async 和 defer 浏览器立即加载并执行指定脚本(读到即加载并执行),阻塞文档解析 async 脚本的加载执行和文档的加载渲染 并行. defer 脚本的加载和文档的加载渲染并行,但脚本的 ...

  7. jcosole使用方法

      一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行.您可以轻松地使用 JCo ...

  8. poj1273 Drainage Ditches Dinic最大流

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 76000   Accepted: 2953 ...

  9. CentOS 7 换yum源

    备份原来的源 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bk 下载阿里源 $ cd /et ...

  10. View拖拽 自定义绑定view拖拽的工具类

    由于工作需求,需要用到这种处理方法所以我就写了这个 废话不多说先看效果图 接下来就看代码吧 DragDropManager import android.app.Activity; import an ...