python(3.5)学习笔记(4)

元组与列表

一、序列

序列是一块存放多个值的连续内存空间,并且按一定顺序排序,每个值(称元素)都分配一个数字,称为索引或位置。
序列结果主要有列表、元组、集合、字典和字符串。

1、1 索引
序列中的每个元素都有一个编号,也称索引。
通过索引可以访问序列中的任何元素。

python中有正数索引和负数索引
序列:       1      2      3      4      5
正数索引:   0      1      2      3      4  (从0开始,从左向右)
负数索引:  -5     -4     -3     -2      -1   (从-1开始,从右向左)

输出列表的最后一个数

num = [1,2,3]
print(num[2])
print(num[-1])

1、2 切片
切片可以访问一定范围内的元素

name[start:end:step]
name:  序列名称
start: 切片的起始位置(包括该位置),不指定则默认为0
end:   切片的终点位置(不包括该位置),不指定则默认为序列的长度
step:  切片的间隔,省略则默认为1,该值省略后最后一个冒号也可以省略
num = [1,2,3,4,5,6]
print(num[1:4])  #访问第2个到第4个元素
print(num[1:6:2])  #访问第2个、第4个、第6个元素
print(num[:])  #访问全部元素,可以将start和end省略,但中间的冒号需要保留

1、3 序列相加
可以使用‘+’运算符实现两种相同类型(同为列表、元组、字符串等,序列中的元素类型可以不同)的序列相加操作,即将两个序列进行连接,但是不去除重复元素。

num1 = [1,2,3]
num2 = [4,5,6]
print(num1 + num2)  #将两个列表合并,并输出

1、4 乘法
使用数字a乘以一个序列会生成新的序列。
新序列的内容为原序列被重复a次的结果。

num = [1,2]
print(num*3)  #输出:[1, 2, 1, 2, 1, 2]

1、5 检查某个元素是否在序列内
使用 in 关键字检查某个元素是否在序列内,也可以使用 not in 关键字检查某个元素是否不在序列内

num = [1,2]
x = 1
print(x in num)  #输出:True
print(x not in num)  #输出:False

1、6 序列处理函数

函数说明
len()返回序列包含元素的个数
max()返回序列中的最大元素
min()返回序列中的最小元素
list()将序列转换为列表
str()将序列转换为字符串
sum()计算元素和
sorted()对元素进行排序
reverse反序序列中的元素
enumerate()将序列组合为一个索引序列,多用在for循环中
num = [2,3,4,5,6,7]
print(len(num))  #输出:6
print(max(num))  #输出:7
print(min(num))  #输出:1

二、列表

列表的所有元素都放在‘[ ]’中,两个相邻元素用‘,’分隔。
可以将整数、实数、字符串、列表、元组等任何类型的内容放入列表中,
且同一个列表中的元素类型可以不同。

2、1 列表的创建、删除

(1)使用赋值运算符(‘=’)直接创建
(2)创建空列表
(3)创建数值列表
可以使用 list() 函数将 range() 函数循环出来的结果转换为列表
list(date):date表示可转换为列表的数据,可以是range对象、字符串、元组等
(4)删除列表
可以使用 del 语句删除列表

num = [1,2,3,4,5]  #  (1),元素个数没有限制
num = []  # (2)
num = list(range(1,6))  #(3),创建数值列表:[1,2,3,4,5]
del num  # (4)

2、2 访问列表元素

num = [1,2,3,4,5,6]
print(num)  #直接使用print()函数输出列表内容,输出包括左右两侧中括号
print(num[2])  #可以通过索引输出单个元素,输出不包括中括号,如果为字符串还不包括左右引号

还可以通过切片操作访问

2、3 遍历列表
(1)直接使用for循环

num = [1,2,3,4,5,6]
for item in num:   #一个一个输出列表中的元素
    print(item)

(2)使用for循环和enumerate()函数
该方法可以同时输出索引值和元素内容

num = [1,2,3,4,5,6]
for index,item in enumerate(num):  #index为索引值,item为元素内容
    print(index,item)

2、4 添加、修改和删除列表元素
也称更新列表
(1)添加元素
①使用 ‘+’ 进行添加
②使用列表对象的append()方法
该方法用于在列表的末尾添加元素

num = [1,2,3,4,5]
print(len(num)) #输出:5
num.append(6)
print(len(num))  #输出:6

③使用 insert() 方法
用于向指定位置插入元素

num = [1,2,3,4,5]
print(num)   #输出:[1, 2, 3, 4, 5]
num.insert(2,6)   #在索引为2的位置插入6
print(num)   #输出:[1, 2, 6, 3, 4, 5]

④使用 extend() 方法
将一个列表中的全部元素添加到另一个列表的后面

num1 = [1,2,3]
num2 = [4,5,6]
num1.extend(num2)
print(num1)   #输出:[1, 2, 3, 4, 5, 6]

(2)修改元素
通过索引获取该元素,再为其重新赋值

num = [1,2,3,4]
print(num)
num[2] = 5   #将索引为2的位置的元素值修改为5
print(num)

(3)删除元素
①根据索引删除
用del语句,与删除列表类似

num = [1,2,3,4]
del num[2]   #将索引为2的位置的元素删除
print(num)  #输出:[1, 2, 4]

②根据元素值删除
删除一个不确定位置的元素,使用 remove() 方法
使用该方法时如果指定元素不存在会出现异常,所以最好先判断指定元素是否存在

num = [1,2,3,4]
if num.count(2)>0:  #count()用于统计指定元素出现的次数,大于0表示存在
    num.remove(2)  #删除元素值为2的元素,只删除一个
print(num)

2、5 对列表进行统计计算
(1)统计列表中指定元素出现的次数
count()方法
(2)获取指定元素首次出现的下标
index()方法实现

num = [1,2,2,3,4]
print(num.index(2))  #输出:1,指定元素不存在会出现异常

(3)统计数值列表的元素和

使用sum()函数
sum(list[,value])
list:要统计的数值列表
value:统计结果加上该值,默认值为0
num = [1,2,3,4]
print(sum(num))  #输出:10
print(sum(num,5))  #输出:15,统计结果加上5

2、6 对列表进行排序
(1)使用列表对象的sort()方法实现

listname.sort(key=None,reverse=False)
listname: 要进行排序的列表名称
key: 表示指定从每个列表元素中提取一个比较键(如"key=str.lower"表示在
排序时不区分大小写),默认区分大小写
reverse: 可选参数。其值为True,表示降序,为False,表示升序。默认为升序
#对数值列表进行排序
num = [3,2,4,1,6,5]
num.sort()   #升序排序
print(num)   #输出:[1, 2, 3, 4, 5, 6]
num.sort(reverse=True)  #降序排序
print(num)   #输出:[6, 5, 4, 3, 2, 1]

num = [[3,4],[3,2],[3,3]]
num.sort()
print(num)  #输出:[[3, 2], [3, 3], [3, 4]]

对字符串列表进行排序时,是先对大写字母进行排序,再对小写字母进行排序。想要对字符串列表进行排序,需要指定其key参数。

num = ["ab","Bc","Ac","ba"]
num.sort()  #默认区分字母大小写
print(num)
num.sort(key=str.lower)  #不区分字母大小写
print(num)

(2)使用内置函数 sorted() 函实
该函数不会改变原列表的顺序

sorted(listname,key=None,reverse=False)
listname:要进行排序的列表名称
key:同sort()
reverse:同sort()
num = [3,2,4,1,6,5]
num1 = sorted(num) #升序
print(num1) #输出:[1, 2, 3, 4, 5, 6]
num2 = sorted(num,reverse=True) #降序
print(num2) #输出:[6, 5, 4, 3, 2, 1]
print(num) #输出:[3, 2, 4, 1, 6, 5],原列表的顺序不变

sort()会改变原列表的顺序,而sorted()会创建一个原列表的副本,不会改变原列表的顺序。

2、7 列表推导式
使用列表推导式可以快速的生成列表,或者根据某个列表生成满足指定需求的列表。
(1)生成指定范围的数值列表

list=[Expression for var in range]
list: 生成的列表名称
Expression: 表达式,用于计算新列表的元素
var: 循环变量
range: 采用range()函数生成的range对象
#生成包含10个随机数(10-50内,含50)的列表
import random #导入random标准库

num = [random.randint(10,50) for i in range(10)]
print(num)

(2)根据列表生成指定需求的列表

newlist=[Expression for var in list]
newlist: 新生成的列表
Express: 表达式,计算新列表的元素
var: 变量,值为list中的每个元素
list: 用于生成 newlist 的原列表
#将num列表中的元素整除2得到新的列表
num = [1,2,3,4,5,6]
newnum = [x//2 for x in num]
print(newnum)  #输出:[0, 1, 1, 2, 2, 3]

(3)从列表中选择符合条件的元素生成新列表

newlist=[Expression for var in list if condition]
newlist: 新生成的列表
Expression: 表达式,计算新列表的元素
var: 变量,值为list中的每个元素
list: 用于生成 newlist 的原列表
condition: 条件表达式,指定选择条件
#在num列表中找出大于4的元素生成新列表
num = [3,5,6,1,2,4,7]
newnum = [x*2 for x in num if x>4] #先判断条件表达式,在通过表达式生成
print(newnum)  #输出:[10, 12, 14],5、6、7大于4,乘2后得到新列表

2、8 二维列表
列表中的元素也可以是列表,所以也支持二维列表的概念。
二维列表就是包含列表的列表,即一个列表的每个元素又是一个列表。
二维列表的创建:
(1)直接定义二维列表

num = [[1,2,3],[4,5,6],[7,8,9]]
print(num)
print(num[0][0])  #输出:1,第一个下标为行,第二个下标为列,从0开始
print(num[1][2])  #输出:6

(2)使用嵌套的for循环创建

#创建一个三行三列的二维列表
num = [] #创建一个空列表
for i in range(3):
    num.append([]) #在空列表中再加入空列表
    for j in range(3):
        num[i].append(j)  #在第i行第j列加入元素j
print(num)  #输出:[[0, 1, 2], [0, 1, 2], [0, 1, 2]]

(3)使用列表推导式创建
这种方法更加简洁,推荐使用

num = [[j for j in range(3)] for i in range(3)]
print(num)  #输出:[[0, 1, 2], [0, 1, 2], [0, 1, 2]]

三、元组

元组与列表类似,也是由一系列特定顺序排序的元素组成,但它是不可变序列。
元组中所有元素都放在'( )'中,两个相邻元素用','分隔。
可以将整数、实数、字符串、列表、元组等放入元组中。
同一个元组中,元素类型可以不同。

通常情况下,元组用于保存程序中不可修改的内容。

3、1 元组的创建、删除
(1)使用赋值运算符(’=’)直接创建
(2)创建空元组
空元组可以应用在为函数传递一个空值或者返回空值时。
(3)创建数值元组
使用tuple()函数将range()函数循环出来的结果转换为数值元组。
(4)删除元组
使用del语句删除

num = (1,2,3,4)  #(1),元素个数没有限制
num = 1,2,3,4  #(1),小括号不是必须的,只要用逗号将一组值分隔开,python就认为它是元组
num = (1,)  #如果要创建的元组只包含一个元素,则需要在元素后面加','
num = (1)  #没加逗号则表示定义一个整数1
num = ()  #(2)
num = tuple(range(1,5))  #(3),创建数值元组(1,2,3,4)
del num  #(4),num为要删除的元组的名称

3、2 访问元组元素

num = (1,2,3,4)
print(num)  #直接使用print()函数输出元组内容,包括左右两侧的小括号
print(num[1])  #通过元素索引获取指定元素,输出不包括小括号,如果为字符串还不包括左右引号
print(num[0:3])  #通过切片访问前三个元素

3、3 遍历元组
同列表一样,元组也可以使用 ①for循环②for和enumerate()函数结合 进行遍历。

3、4 修改元组
元组是不可变序列,所以不能对单个元素值进行修改。但是
①可以对元组进行重新赋值

num = (1,2,3)
num = (1,2,3,4)  #对num元组重新赋值

②可以对元组进行连接组合

num = (1,2,3)
num = num + (4,5,6)  #连接的内容必须是元组

3、5 元组推导式
与列表推导式相似,只是将列表推导式中的’[ ]‘修改为’( )’。
使用元组推导式生成的结果并不是一个元组或列表,而是一个生成器对象,这点与列表推导式不同。使用 tuple() 可以将其转换为元组,使用 list() 可以将其转换为列表。

num = (i for i in range(1,5))
print(tuple(num))  #将生成器对象转换为元组,输出:(1,2,3,4)
print(tuple(num))  #输出:(),转换后原生成器对象已经不存在,还想使用需要重新创建

3、5 列表与元组的区别
(1)列表属于可变序列,元素可以随时修改或删除。元组属于不可变序列,元素不可修改,除非整体替换。
(2)列表可以使用 append()、extend()、insert()、remove()等方法实现添加和修改列表元素。元组没有。
(3)可以使用切片访问和修改列表中的元素。但只能使用切片访问元组中的元素,不能修改。
(4)元组比列表的访问和处理速度快。
(5)列表不能作为字典的键。元组可以。

如有错误请指出
参考文献《python从入门到精通》

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值