您的位置:首页 > 编程语言 > Python开发

Python学习笔记3_列表和元组

2015-07-01 11:20 639 查看

Python的数据结构

序列是python中最基本的数据结构,共六种内建序列:列表、元组、字符串、Unicode字符串、buffer对象、和xrange对象。还有一种数据结构叫映射,如字典

容器(python的数据结构)
--序列
--列表
--元组
--字符串
-- Unicode字符串
--buffer对象
--xrange对象
--映射
--对象
--集合


列表可以修改,元组不可修改

1.通用序列操作

1.1 序列的访问方式:索引访问和分片访问

#序列
week = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]

#使用索引访问元素,可以从前往后(从0开始),也可以从后往前(从-1开始)
print("周三是:"+week[2])
print("周日是:"+week[-1])

#分片访问,用冒号分割,与java的String对象的subString方法异曲同工。
print("周三到周六分别为:"+str(week[2:5]))

#特别的访问方式
print("一周前三天为:"+str(week[:3]))
print("一周后三天为:"+str(week[-3:]))

#显示设置分片访问的步长(默认为步长为1,即直接取下一个数)
print("步长为2的分片访问:"+str(week[::2]))


执行结果如下:

周三是:Wednesday
周日是:Sunday
周三到周六分别为:['Wednesday', 'Thursday', 'Friday']
一周前三天为:['Monday', 'Tuesday', 'Wednesday']
一周后三天为:['Friday', 'Saturday', 'Sunday']
步长为2的分片访问:['Monday', 'Wednesday', 'Friday', 'Sunday']


1.2 序列的运算:序列相加、乘法【一个数字乘以序列】

seq1 = [1,2,3]
seq2 = [4,5,6]
#序列相加(可以理解为序列的有序合并)
seq3 = seq1 + seq2
#序列的乘法(可以理解为序列的n次合并)
seq4 = seq1 * 3
print(seq3)
print(seq4)


运行结果:

[1, 2, 3, 4, 5, 6]
[1, 2, 3, 1, 2, 3, 1, 2, 3]


Python的内建值None,代表空值.n个元素的序列可以这样定义:seq = [None] * n。

1.3 成员资格

成员资格使用in运算,即判断某元素是否在序列中

#资格运算
permissions = 'rw'
print('r' in permissions)
print('rw' in permissions)
print('x' in permissions)
print('wr' in permissions)
print('-----------------')
nums = [1,2,3,4]
nums2 = [1,2]
nums3 = [1,3]
nums4 = [3]
print(nums2 in nums)
print(nums3 in nums)
print(nums4 in nums)


运行结果:

True
True
False
False
-----------------
False
False
False


1.4 长度、最小值、最大值

可以使用对应的内建函数len、min、max进行运算

print(len(nums))
print(min(nums))
print(max(nums))
print(max(4,2,5))
print(min(4,2,5))


运行结果:

5
1
8
5
2


max和min函数可以以序列为参数,也可以多个数字做参数

2.列表【可变序列】操作

2.1 list函数【用于把序列转换成可修改的列表】

#列表操作#########
name = "LeonWang"
#把序列转换成列表
nameSeq = list(name)
print(nameSeq)


运行结果:

['L', 'e', 'o', 'n', 'W', 'a', 'n', 'g']


这个函数适用于所有类型的序列。

2.2 基本列表操作

name = "LeonWang"
nameSeq = list(name)
print(nameSeq)
#赋值操作
nameSeq[3] = 'm'
print(nameSeq)
#删除元素
del nameSeq[3]
print(nameSeq)
#分片赋值
nameSeq[4:5] = list('Li')
print(nameSeq)


运行结果:

['L', 'e', 'o', 'n', 'W', 'a', 'n', 'g']
['L', 'e', 'o', 'm', 'W', 'a', 'n', 'g']
['L', 'e', 'o', 'W', 'a', 'n', 'g']
['L', 'e', 'o', 'W', 'L', 'i', 'n', 'g']


分片赋值时赋值列表的元素个数不一定要跟分片个数一致,可以在分片位置插入少于或者多于分片元素个数。也可以通过分片赋空值的方法达到删除元素的效果

2.3 列表方法

MethodCommon
append在列表末尾追加新的对象(字符,字符串,数字,列表等等)
count统计某个元素在列表中出现的次数
extend在列表的末尾一次性追加另一个序列中的多个值(用新列表扩展原列表)
index用于找出某个元素第一个匹配位置
insert用于将对象插入到列表中
pop移除列表中的一个元素(默认最后一个)并返回该值
remove移除列表中某个值的第一个匹配项目
reverse将列表中的元素方向存放
sort用于在原位置对列表进行排序
高级排序
#列表方法
words = ["I","LOVE","YOU",",","CHINA","!"]
print("原列表:"+str(words))
words.append("^_^")
print("列表末尾追加后:"+str(words))
print("统计YOU出现的次数:"+str(words.count("YOU"))+",YO出现的次数:"+str(words.count("YO")))
anowords = ["THAT'S","TRUE"]
words.extend(anowords)
print("用列表anowords扩展列表words后:"+str(words))


运行结果:

原列表:['I', 'LOVE', 'YOU', ',', 'CHINA', '!']
列表末尾追加后:['I', 'LOVE', 'YOU', ',', 'CHINA', '!', '^_^']
统计YOU出现的次数:1,YO出现的次数:0
用列表anowords扩展列表words后:['I', 'LOVE', 'YOU', ',', 'CHINA', '!', '^_^', "THAT'S", 'TRUE']


这些方法都是通过列表对象进行调用,类似于java的方法调用,使用非常简单,不全部列举,不过有几点需要注意:

extend与连接操作(+)看似一样,其实不然,extend是修改了被扩展的序列,而连接操作返回全新的列表。

list方法使用时,若找到匹配元素则返回其所在索引位置,否则异常

pop与remove的区别:pop有返回值,参数可有可无,删除的是某索引位置的值,remove无返回值,需要参数,删除的是某元素第一次出现的位置,当元素不存在时异常。

sort方法没有返回值,切记。

高级排序是通过编写比较函数compare,实现元素的比较规则,然后调用列表的sort方法,将比较函数名作为参数传递进去.这种方式也类似于java.

3. 元组【不可变序列】

元组的初始化

使用逗号分割了某些值,即创建了元组。元组一般是以()表示括起来的。若要创建一个元素的元组也需要用在元素后面加逗号,否则不为元组。

#元组初始化
students = "Leon","Lucy","Lily"
print(students)
student = ("Leon",)
print(student)


运行结果:

('Leon', 'Lucy', 'Lily')
('Leon',)


tuple函数,类似于list函数,只是转换目标不同,list用于转成列表,而tuple用于转换成元组。如果参数本身就是元组,则参数被原样返回。

#tuple函数
name = "Leon"
namechars = tuple(name)
print(namechars)


运行结果:

('Leon',)
('L', 'e', 'o', 'n')


元组基本操作:基本就是创建和访问,访问方式同于其他序列。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: