06列表

1 序列(sequence)

1.1 基本概念
  • 序列是python中最基本的一种数据结构
  • 数据结构是计算机中数据存储的方式
  • 序列用于保存一种有序数据,所有数据在序列中都由一个唯一的位置
  • 每个数据在序列中的唯一位置称之为“索引”,索引的分配是按照数据添加的顺序来进行分配的
1.2 序列的分类
  • 可变序列,如列表(list)、字典(dict)
  • 不可变序列,如字符串(str)、元组(tuple)

2 列表

  • 列表list是python中的一个对象
  • 列表是用来存储对象的对象
  • 列表中可以保存多个有序的数据
2.1 列表的使用
  • 列表的创建:通过[]进行空列创建
# 通过[]创建列表
# lst=[1,2,3]
# 列表可以保存任意的对象
lst=[1,'name',[1,2,1],True]
print(lst,type(lst))
# 索引是从0开始
print(lst[1])
# len()获取列表长度(索引最大值)或字符串长度
print(len(lst))
# 列表参数为负
print(lst[-1])
2.2 切片
  • 切片是指从现有列表中获取一个子列表
  • 可通过切片来获取指定的元素
  • 语法:列表[起始:结束:步长]
  • 通过切片获取数据时会包括起点元素,但不包括重点数据
  • 省略起点和终点位置
    。省略起点位置:从第一个元素开始截取
    。省略终点位置:截取一直到终点的所有数据
    。起点和终点都省略:截取所有从第一个到最后一个数据元素
  • 步长表示每次获取元素的间隔,不写默认为1
  • 步长不可为0,负数表示逆向
# 切片是从现有列表中获取一个子列表,不影响原列表值
# 通过切片来获取指定元素
# 语法:列表[开始:结束:步长]
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print(hero[2:4]) #['蜘蛛侠', '黑寡妇']
print(hero[:3]) #['钢铁侠', '绿巨人', '蜘蛛侠']
print(hero[1:]) #['绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
print(hero[:]) #['钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
print(hero[::1]) #['钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
print(hero[::2]) #['钢铁侠', '蜘蛛侠', '蚁人']
print(hero[::-2]) #['美国队长', '黑寡妇', '绿巨人']
print(hero[::-1]) # ['美国队长', '蚁人', '黑寡妇', '蜘蛛侠', '绿巨人', '钢铁侠']

3 通用操作

  • + 和 *
    。+ 可以将两个列表拼接成一个列表
    。* 可以将列表重复指定的次数 (注意2个列表不能够做乘法,列表可以和整数做乘法运算)
# +、*
lst=[1,2,3]+[4,5,6]
print(lst)  # [1, 2, 3, 4, 5, 6]
 # lst=[1,2,3]*[4,5,6] #can't multiply sequence by non-int of type 'list'
 # print(lst)
# 列表与整数相乘使列表拼接本身内容整数次
lst=[1,2,3]*2
print(lst) # [1, 2, 3, 1, 2, 3]
  • innot in
    。in用来检查指定元素是否列表当中
    。not in 用来检查指定元素是否在列表当中
# in 和 not in
# in 判断指定元素是否存在指定列表中
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print('绿巨人'in lst) #False
print('绿巨人'in hero) #True
print('绿巨人'not in lst) #True
  • len() 获取列表中元素的个数
  • max() 获取列表中最
  • min() 获取列表中最
# max()、min()获取最大、最小值
print(max(lst),min(lst)) # 3 1
# print(max(hero),min(hero)) #按字符ascii码进行比较,字符串比较大小
# print(ord('钢'),ord('绿'),ord('蜘'),ord('黑'),ord('蚁'),ord('美'))
  • list.index(x, start, end)
    。第一个参数 获取指定元素在列表中的位置
    。第二个参数 表示查找的起始位置
    。第三个参数 表示查找的结束位置
lst=[1,2,3,1,2]
# print(hero.index('蜘蛛侠')) #2
print(lst.index(1),lst.index(2)) # 0 1 列表中有重复值时取第一个值
# 想要查找重复值中其他值时,可以越过第一个或者指定范围
# 跳过
print(lst.index(1,1),lst.index(2,2))# 3 4
# 指定范围 index(*,*,*)第一个参数为查找元素,第二个参数为起点索引,第三个参数为终点索引
print(lst.index(1,1,4)) # 3
# lst.count()统计出现次数
print(lst.count(1)) # 2
  • list.count(x) 统计指定元素在列表中出现的个数

4 修改列表

  • 通过切片来修改列表(就是给切片的内容重新赋值,但是赋值的内容必须是一个序列)
  • 当设置了步长时,序列中元素的个数必须和切片中元素的个数保持一致
  • 通过切片来删除元素
    del list [起始 :结束]
    list[1:2] = []
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
# # 通过索引
# print(hero) #修改前
# hero[0]='雷神'
# print(hero) #修改后 ['雷神', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']

# # 通过del删除元素
# del hero[2]
# print(hero) #['雷神', '绿巨人', '黑寡妇', '蚁人', '美国队长']

# 通过切片更改,传递的必须也是一个序列
# hero[0:3]='abcd' # ['a', 'b', 'c', 'd', '黑寡妇', '蚁人', '美国队长']
# hero[0:3]= abcd  # NameError: name 'abcd' is not defined
#hero[0:3]= '123' # ['1', '2', '3', '黑寡妇', '蚁人', '美国队长']
#hero[0:3]= 123  # TypeError: can only assign an iterable
print('修改前:',hero)
# #三个元素替换两个元素,ok
# hero[0:2]=['黑豹','雷神','灭霸']  # ['黑豹', '雷神', '灭霸', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
# 向索引为0位置插入元素
# hero[0:0]=['雷神'] #['雷神', '钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
# 当设置了步长时,序列元素个数与切片中元素个数必须一致
# hero[::2]=['雷神'] # ValueError: attempt to assign sequence of size 1 to extended slice of size 3
# hero[::2]=['黑豹','雷神','灭霸']
# 通过切片删除元素
# hero[0:1]=[] # ['绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
# del hero[0:2]
print('修改后:',hero)
  • 所谓修改只针对可变序列,字符串和元组不可变的当然不能直接修改,但可以通过转化为可修改序列操作
# 只有可变序列才可以修改
s='python'
# s[1]='i' # TypeError: 'str' object does not support item assignment
s=list(s)
s[1]='i' #['p', 'i', 't', 'h', 'o', 'n']
print(s)

5 列表的方法

  • append() 向列表的最后添加一个元素
  • insert(arg1,arg2) 向列表指定位置插入一个元素:参数1-要插入的位置,参数2-要插入的元素
  • extend( iterable ) 使用一个新的序列来扩展当前序列(它会将该序列的中元素添加到列表中) 参数需要传递一个序列
  • pop() 根据索引删除并返回指定元素
  • remove() 删除指定元素 (如果相同值的元素有多个,只会删除第一个)
  • reverse() 翻转列表
  • sort(key=None,reverse=False) 用来对列表中的元素进行排序 reverseTrue反序,False 正序
hero = ['钢铁侠','绿巨人','蜘蛛侠'] # ,'黑寡妇','蚁人','美国队长'
# print('修改前:',hero)

# hero[3]='b' #IndexError: list assignment index out of range
# .append()向列表最后添加一个元素
# hero.append('黑寡妇')

# insert是向列表指定位置添加一个元素,参数1-位置,参数2-元素
# hero.insert(2,'黑寡妇') # ['钢铁侠', '绿巨人', '黑寡妇', '蜘蛛侠']
# hero.insert(5,'蚁人') #修改后: ['钢铁侠', '绿巨人', '蜘蛛侠', '蚁人']当插入位置超出最大值时永远在末尾插入一个值,而不是报错

# extend 使用新的序列来扩展当前序列
# hero.extend(123) # TypeError: 'int' object is not iterable
# hero.extend(['黑寡妇','蚁人']) # 修改后:['钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人']
# hero+=['黑寡妇','蚁人'] # 修改后: ['钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人']

# clear清空集合
# hero.clear() # 修改后: []

# pop根据索引删除并返回指定的元素
# hero.pop(2)
# pop 中没指定索引值时删除最后一个元素
# print('修改后:',hero.pop(2)) #修改后: 蜘蛛侠
# print('修改后:',hero.pop()) #修改后: 蜘蛛侠

# remove 根据指定的元素删除值,如果有重复值删除第一个
# hero.insert(3,'绿巨人')
# hero.remove('绿巨人')
# print('修改后:',hero.remove('绿巨人')) # 修改后: None  无返回值

# reverse 反转列表
# hero.reverse()
# print('修改后:',hero) # 修改后: ['蜘蛛侠', '绿巨人', '钢铁侠']

# # sort默认升序排列
# lst=list('asddfipdofi')
# print('修改前:',lst)
# lst.sort()
# print('修改后:',lst)  # 修改后: ['a', 'd', 'd', 'd', 'f', 'f', 'i', 'i', 'o', 'p', 's']
# lst.sort(reverse=True)
# print('修改后:',lst)  # 修改后: ['s', 'p', 'o', 'i', 'i', 'f', 'f', 'd', 'd', 'd', 'a']

6 遍历列表

6.1 for循环
  • 通过for循环来遍历列表
  • 语法:
    for 变量 in 序列:
         代码块
  • 注意: for循环的代码块会执行多次,序列中有几个元素就会执行几次。每执行一次就会将序列中的一个元素赋值给变量,所以我们可以通过变量来获取列表中的元素
'''
for 语句中的代码块循环执行n次,n为列表中元素的个数,每执行一次从列表中取出一个值赋值给变量
'''
for i in hero:
    print(i,' ',end='')
# 执行结果是 钢铁侠  绿巨人  蜘蛛侠  黑寡妇
6.2 range(start,stop[, step])
  • 参数说明
    。start:计数从 start 开始,默认是从 0 开始,例如range(5)等价于range(0, 5)
    。stop:计数到 stop 结束,但不包括 stop,例如range(0, 5) 是[0, 1,2, 3, 4]没有5
    。step:步长,默认为1,例如:range(0, 5) 等价于 range(0, 5, 1)
# range
'''
开始 默认是0,可以省略 
结束 不包含结束元素
步长 默认为1,可以省略
'''
# 举例获取列表中的奇数
lst=[1,2,3,4,5,6,7,8,9]
# print(list(range(0,20,2))) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

'''这里的i是索引值啦'''
# for i in range(0,9,2):
#     print(lst[i],' ',end='') # 1  3  5  7  9

for i in range(len(lst)):
    # print(i,end='') # 此时i为索引值  012345678
    print(lst[i],end='') # 此时为列表元素值  123456789
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值