四、列表 元组

1. 列表(list)

特性

  • 承载任意的数据类型,存储大量的数据

  • 查询速度比较慢

创建

l = [1, 2, 'hello']		# 列表格式
l = list('abc')		# ['a','b','c']
  • 列表与列表相加
  • 列表与数字相乘
l1 = ['你好',123]
l2 = ['hello',456]
print(l1+l2)	# ['你好', 123, 'hello', 456]
print(l1*2)		# ['你好', 123, '你好', 123]

切片

例:l = [100, '你好',True]

  • 索引:列表内以逗号分割为一个元素,每个元素可保留自己的数据类型
l[1]		# 100 <class 'int'>
l[-1]		# True <class 'bool'>
  • 切片:与字符串切片用法相同
l[:2]			# [100, '你好']
l[-2::-1]		# ['你好', 100]

增删改查

  • 追加 :list.appeng(元素)

  • 插入 :list.insert(索引, 元素)

  • 迭代追加 :list.extend(序列)(可追加序列中的多个值)


  • 按索引删除 :list.pop(索引)(删除并返回删除的值,默认删除最后一个元素)

  • 按切片删除 :del list[切片](与字符串切片步长相同)

  • 指定元素删除 :list.remove(元素)(如果有重名元素,仅删除第一个)

  • 清空 :list.clbear()


  • 按索引改:list[索引] = 改的值

  • 按切片改:切片可以迭代改值,加步长要改动的元素必须与迭代的元素一一对应

l = ['a',2,'b',4]
l[1:] = 'bc'     	# ['a','b','c']
l[::2] = '13'		# [1,2,3,4]

  • 按切片:print(l[::2])
  • for循环:for i in l:print(i)

循环注意:循环列表时,改变列表大小会影响索引

  • 切片删除:del l1[1::2]
  • 倒序法删除:for i in range(len(l1)-1,-1,-1):
  • 思维置换:将满足条件的放入新列表

嵌套

lb = [1,2,'你好',[1,'hello',3,]]

  • 索引嵌套获取嵌套的列表:lb[-1][1] # hello
  • 嵌套改值:lb[-1][1] += '!' # hello!

其他操作

排序命令(通常用于数字列表)

  • 升序 :list.sort()

  • 降序 :list.sort(reverse=1)

  • 反转 :list.reverse()

统计

  • 计数:list.count(对象)(统计元素2出现的次数)

  • 获取长度:len(list)(输出列表有多少元素)

  • 获取索引:list.index(元素)(返回元素首次出现列表的下标,没有此元素会报错)

enumerate() 列举

将可迭代对象的每个元素和对应的序号组合成序列为元组,可以指定序号的起始值

语法enumerate(sequence, start=0)

  • sequence:序列、可迭代对象(如:列表、元组、字符串)
  • start:起始序号,可自定义起始值,默认为 0
l1 = ['a', 'b', 'c']
for i in enumerate(l1):print(i)      # [(0, 'a'), (1, 'b'), (2, 'c')]
for i in enumerate(l1, start=6):print(i)    # [(6, 'a'), (7, 'b'), (8, 'c')]
for a,b in enumerate(seq):print(a, b)		# 拆包

2. 元祖(tuple)

不可变的只读数据类型,有序排列

t = (1, [1, 2])

索引查看:print(y[0])		# (1)
切片查看:print(y[::-1])		# [1,2]
循环查看:for i in t:print(i)	# 循环元素
元组长度:len(t)				# 2

  • 可变数据类型的子元素内部可以变动
y[-1].append(4)			# 元组内列表是可变数据类型,内部可以增加
print(y)				# (1, [1, 2, 3])

  • 单元素的元组,一定要添加一个逗号
y = ('meet')
print(type(tu))			# <class 'str'>
tu = ('meet',)
print(type(tu))  		# <class 'tuple'>

  • 元组的拆包
c = (1, 2)				# 元组不可被更改内容,但可以赋值于变量
a, b = c				# 元素必须一一对应
print(a, b)				# 1 2

  • 元组的嵌套:索引嵌套获取嵌套的元组
y = (1, 2, ('a', 'b'))
print(y[-1][-1])			# b

其他操作

  • 计数tuple.count(元素)(某元素出现的次数)
t = (1,2,2,2,3,4)
print(t.count(2))       # 3
  • 查找下标tuple.index(元素)(通过元素找索引,找到第一个就返回,找不到就报错)
t = ('hello','hi','hello')
print(t.index('hello'))		# 0

range() 范围

可创建一个整数元组,可控制数字的范围,类似切片

语法range(start, stop, step)

  • start:起始值,默认为 0 可不写
  • stop:结束值,实际取值要 +1
  • step:步长值,默认为 1 可不写
单值:range(4) 				# (0, 1, 2, 3)
双值:range(3, 6)				# (3, 4, 5)
三值:range(6, 3, -1)			# (6, 5, 4)
切片:print(range(4)[-1])		# 3
  • 与for循环结合
for i in range(1,9): print(i)       # 1-10
for i in range(2,11,2): print(i)       # 1-10偶数 
for i in range(10,0,-1): print(i)       # 10-1
  • 依次输出列表的所有索引
lb = [1, 2, 3,'a','b']
for i in range(len(lb)): print(i)		# 获取列表长度为range值

posted @ 2020-03-19 11:46  今夜星河漫漫  阅读(165)  评论(0编辑  收藏  举报