Python数据类型——序列(列表、元组、字符串)

0x00 准备

数据结构
数据结构是通过某种方式组织在一起的数据元素的集合

0x01 序列

六种内建序列:
列表(可以修改)
元组(不能修改)
Unicode字符串(不能修改)
buffer对象
xrange对象

Python的数据访问模型:直接存取 ,序列 ,映射

对非容器类都可以直接存取,所有的数值类型归为此类。

序列类型是指容器内的元素从0开始的索引顺序访问,一次可以访问一个或者多个元素。 字符串列表元组归到次类

映射类型和序列类型不同之处,它使用的索引和顺序的数字偏移量不同,它的元素无序存放,通过唯一的key来访问。 字典就是这种类型。

字符串(strings),列表(lists),元组(tuples),我们可以统称为序列。

序列通用的操作符

  • 连接操作符(+)
  • 重复操作符(*)
  • 切片操作符 [ ] [:] [: : ]
  • 成员操作符( in , not in )

序列通用操作

索引

>>> t='hello'
>>> t[0]
'h'

分片
第一个索引元素是包含在分片内,第二个不在分片内

>>> tag='<a href="http://www.python.org">python web site</a>'
>>> tag[32:-4]
'python web site'

>>> number=[1,2,3,4,5,6,7,8,9,10]
>>> number[3:6]
[4,5,6]
>>> number[0:1]
[1]
>>> number[-3:-1]
[8,9]

分片中左边索引比右边晚出现在序列中,结果就是一个空的序列

>>> number[-3:0]
[]

>>> number[-3:]
[8,9,10]

>>>number[:3]
[1,2,3]

步长
a[0:10:1]
最后一个元素表示步长

>>> number=[1,2,3,4,5,6,7,8,9,10]
>>> number[0:10:1]
[1,2,3,4,5,6,7,8,9,10]
>>> number[0:10:2]
[1,3,5,7,9]
>>> number[3:6:3]
[4]
快速使用
>>> number[::4]
[1,5,9]
步长为负数  
>>> number[8:3:-1]
[9,8,7,6,5]
>>> number[10:0:-2]
[10,8,6,4,2]
>>> number[0:10:-2]
[]
>>> number[::-2]
[10,8,6,4,2]
>>> number[5::-2]
[6,4,2]
>>> number[:5:-2]
[10,8]

序列运算

>>> [1,2,3]+[4,5,6]
[1,2,3,4,5,6]
>>> 'Hello,'+'world!'
'Hello,world!'
>>> 'python'*5
'pythonpythonpythonpythonpython'
>>> [42]*5
[42,42,42,42,42]

例子:
根据用户输入自动调整大小的盒子

sentence = raw_input("Sentence:")
screen_width = 80
text_width = len(sentence)
box_width = text_width +6
left_margin = (screen_width - box_width) // 2
print
print ' ' * left_margin + '+' + '-' * text_width + '+'
print ' ' * left_margin + '|' + ' ' * text_width + '|'
print ' ' * left_margin + '|' +     sentence     + '|'
print ' ' * left_margin + '|' + ' ' * text_width + '|'
print ' ' * left_margin + '+' + '-' * text_width + '+'
print 

成员资格
检查值是否存在序列中

>>> t1 = 'ew'
>>> 'w' in t1
>>> True
database = [['t1','1234'],['t2','5678'],['t3','4321'],['t4','9876']]
username = raw_input('User name:')
pin = raw_input('PIN code:')
if [username,pin] in database:print 'Access granted'

内建函数

  • len

    >>> number = [100,34,678]
    >>> len(number)
    3
  • min

    >>> number = [100,34,678]
    >>> min(number)
    34
  • max
>>> max(2,3,4,5)
>>> 5

0x02 元组tuple()

不能修改的一种序列、用圆括号括起来表示

tuple函数

将序列转换为元组

>>> tuple([1,2,3])
(1,2,3)
>>> tuple('abc')
('a','b','c')
>>> tuple((1,2,3))
(1,2,3)

1、创建元组

>>> a = (1, 3, 5, 7)

>>> a

(1, 3, 5, 7)

>>> a = ('physics', 'chemistry', 1997, 2000)

>>> a

('physics', 'chemistry', 1997, 2000)

>>> a="1","b","33"

>>>a

('1', 'b', '33')

创建空元组

tup1=()

元组中只包含一个元素时,需要在元素后面添加逗号来消除歧义

tup1 = (50,)

元组与字符串类似,下标索引从0开始,可以进行截取,组合等。

2、访问元组

>>> a = ('a', 3, 5, 7)

>>> a

('a', 3, 5, 7)

>>>a[2]

5

>>>a[1:2]

(3,)

>>>a[:2]

('a', 3)

>>>a[2:]

(5, 7)

3、增、删、改

需要重新组成一个新的元组

>>> aTuple=aTuple[0],aTuple[1],aTuple[-1]
>>> aTuple
(123,'abc',(7-9j))
>>> t1=(12,34.23)
>>> t2=('asv','12xyz')
>>> t3=t1+t2
>>> t3
(12,34.23,'asv','12xyz')

4、内建函数

Python元组包含了以下内置函数

1、cmp(tuple1, tuple2):比较两个元组元素。
2、len(tuple):计算元组元素个数。
3、max(tuple):返回元组中元素最大值。
4、min(tuple):返回元组中元素最小值。
5tuple(seq):将序列作为参数转换为元组。
>>> tuple([1,2,3])
(1,2,3)
>>> tuple('abc')
('a','b','c')
>>> tuple((1,2,3))
(1,2,3)

0x03 列表[]

能够修改的一种序列,用[]表示
list函数
内建函数、将其他类型的序列转换成列表

>>> list('Hello')
['H','e','l','l','o']

1、创建列表

>>> x=[]
>>> x=[1,2,3]
>>> x
[1,2,3]
>>> x=[1,]
>>> x
[1]

2、列表的基本操作

改变列表、元素赋值

>>> x=[1,2,3]
>>> x[1]=3
>>> x
[1,3,3]

删除元素

>>> a=[1,2,3,4]
>>> del a[2]
>>> del
[1,2,4]
分片

分片赋值

>>> name=list('Perl')
>>> name
['P','e','r','l']
>>> name[2:]=list('ar')
>>> name 
['P','e','a','r']

分片插入

>>> number=[1,5]
>>> number[1:1]=[2,3,4]
>>> number
[1,2,3,4,5]

分片删除

>>> number
[1,2,3,4,5]
>>> number[1:4]=[]
>>> number
[1,5]

3、列表方法

1、append
——列表末尾追加对象

>>> lst=[1,2,3]
>>> lst.append(4)
>>> lst
[1,2,3,4]

2、count——统计某个元素在列表中出现的次数

>>> ['to','be','or','to'].count('to')
2
>>> x=[[1,2],1,1,[2,1,[1,2]]
>>> x.count(1)
2
>>> x.count([1,2])
1

3、extend——在列表末尾一次性追加另一个序列中的多个值

>>> a=[1,2,3]
>>> b=[4,5,6]
>>> a.extend(b)
>>> a
[1,2,3,4,5,6]

注意
extend方法修改被扩展的序列、
而+操作是全新的列表、效率比extend低

4、index——用于从列表中找出某个值第一个匹配项的索引位置

>>> number=['1','2']
>>> number.index('2')
1

5、insert——将对象插入到列表的指定位置

>>> number=[1,2,3,5,6,7]
>>> number.insert(3,'four')
>>> number  
[1,2,3,'four',5,6,7]

6、pop
pop会移除列表中的一个元素(默认是最后一个),并且返回该元素的值

>>> x=[1,2,3]
>>> x.pop()
3
>>> x
[1,2]
>>> x.pop(0)
1
>>> x
[2]

入栈append
出栈pop

>>> x=[1,2,3]
>>> x.append(x.pop())
>>> x
[1,2,3]

7、remove
移除列表中某个值的第一个匹配项 没有返回值

>>> x=['to','be','not','be']
>>> x.remove('be')
>>> x
['to','not']

8、reverse
将列表中的元素反向存放

>>> x=[1,2,3]
>>> x.reverse()
>>> x
[3,2,1]

9、sort
在原位置对列表进行排序,没有返回值,是None、不能够直接赋值

>>> x=[4,6,2,1,7,9]
>>> x.sort()
>>> x
[1,2,4,6,7,9]

10、sorted
获取另一种已排序的列表副本方法

>>> x=[4,6,2,1,7,9]
>>> y=sorted(x)
>>> x
[4,6,2,1,7,9]
>>> y
[1,2,4,6,7,9]
  • 高级排序
>>> cmp(42.32)
1
>>> cmp(99,100)
-1
>>> cmp(10,10)
0
>>> number=[5,2,9,7]
>>> number.sort(cmp)
>>> number
[2,5,7,9]

参数key与参数cmp类似——必须提供一个在排序过程中使用的函数、为每一个元素创建一个键,然后将所有元素根据键来排序

>>> x=['asfdfd','abc','acme']
>>> x.sort(key=len)
>>> x
['abc','acme','asfdfd']

反向排序

>>> x=[4,6,2,1,7,9]
>>> x.sort(reverse=True)
>>> x
[9,7,6,4,2,1]

0x04 字符串

不可变类型
1、创建字符串

>>> website = 'tetete'

2、字符串基本操作
索引

>>> string = 'string'
>>> string[2]
'r'

不能够直接改变值

>>> string[2] = 'd'
❌  错误

3、字符串方法
字符串常量
引入import string

  • string.digits:包含数字0~9的字符串
  • string.letters:包含所有字母(大写或者小写)的字符串
  • string.lowercase:包含所有小写字母的字符串
  • string.printable:包含所有可打印字符的字符串
  • string.punctuation:包含所有标点的字符串
  • string.uppercase:包含所有大写字母的字符串

find
查找字符串中的子字符串,返回子串所在位置的最左端索引,没有则返回-1

join
连接字符串列表

>>> seq = ['1','2','3','4','5']
>>> sep = '+'
>>> sep.join(seq)
'1+2+3+4+5'

lowr
返回字符串小写字母

>>> name = 'Gumby'
>>> name = ['gumby','smith','jones']
>>> if name.lower() in names:print 'Found it!'
Found it!

replace
查找并替换
可以匹配多个字符 但只能替换一次

>>> 'This is a test'.replace('is','eez')

split
join的逆方法 将字符串分割成序列

>>> '1+2+3+4'.split('+')
['1','2','3','4']

strip
去除字符串两侧指定字符
不加参数,去掉空格

>>> '*** SPAM * for * everyone!!! ***'.strip(' *!')
'SPAM * for * everyone'

lstrip去除左侧
rstrip去除右侧

translate
替换字符串的某些部分 仅仅处理单个字符 可同时替换多个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值