前置疑问:
Q1:列表和元组属于什么? Q2:列表和元组之间有什么相同之处,不同之处?
学习内容:
1、序列的定义。 1、列表的特点、创建、常见操作。 2、元组的特点、创建、常见操作。
学习产出:
1、序列
1.1 定义
一种数据存储方式,用一块连续的内存空间存储多个值。
1.2 序列有哪些
字符串、列表、元组、字典、集合都属于序列
1.3 内存存储方式图
A1
列表和元组都属于序列
2、 列表 list
2.1 定义
用一块连续的存储空间存储任意数目、任意类型的数据集合。
2.2 创建方式
>>> a = [1,2,3,56,"hahaha","python"]
>>> a
[1, 2, 3, 56, 'hahaha', 'python']
>>> b = list() #创建一个空列表的对象
>>> b = list(range(10))
>>> b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b = list("i love you")
>>> b
['i', ' ', 'l', 'o', 'v', 'e', ' ', 'y', 'o', 'u']
- range() 创建
格式:range(start, end, step) start参数可选,默认是0;end参数必选,表示结尾数字;step参数可选,默认是1
>>> list(range(1,10,2))
[1, 3, 5, 7, 9]
>>> list(range(20,10,-1))
[20, 19, 18, 17, 16, 15, 14, 13, 12, 11]
>>> a = [x * 2 for x in range(5)]
>>> a
[0, 2, 4, 6, 8]
>>> b = [x * 2 for x in range(100) if x%3 == 0]
>>> b
[0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96, 102, 108, 114, 120, 126, 132, 138, 144, 150, 156, 162, 168, 174, 180, 186, 192, 198]
解释:首先执行循环 x=(0,1,2,3,4),然后执行 x*2 =(0 ,2,4,6,8),最后生成列表
2.3 常见方法
方法 | 说明 | 区别 |
---|
append() | 在列表尾部添加元素 | 不需要新建对象,在原值上进行修改,效率高,推荐使用 | + | 类似字符串的拼接 | 需要新建一个对象,浪费内存,耗时慢 | extend() | 扩展列表,讲元素扩展到列表后面 | 不需要创建对象,在原值上进行修改 |
>>> list1 = [20,30,40]
>>> list1.append(50)
>>> list1
[20, 30, 40, 50]
>>> id(list1)
1971841232512
>>> list1 = list1 + [60]
>>> list1
[20, 30, 40, 50, 50, 60]
>>> id(list1) #地址发生改变
1971840978432
>>> list1.extend([70,80])
>>> list1
[20, 30, 40, 50, 50, 60, 70, 80]
- 插入:insert()
1、insert方法的本质是:元素后移,需要浪费很多时间。 2、insert方法图表示
>>> list1 = [10,20,30,50,60]
>>> list1.insert(3,40)
>>> list1
[10, 20, 30, 40, 50, 60]
- 删除:del list_name[] 、pop()、remove()
1、del list_name[]方法本质是元素前移 2、del方法图表示
3、pop():将元素弹出列表并返回,默认是从列表最后一个元素,也可指定元素下标。
4、remove():删除列表中首次出现的元素,若元素不在列表中,报错。
>>> list2 = [10,20,30,40,50,70,60]
>>> list2
[10, 20, 30, 40, 50, 70, 60]
>>> del list2[5]
>>> list2
[10, 20, 30, 40, 50, 60]
>>> list3 = [10 ,70, 20, 30, 40, 50, 60]
>>> list3
[10, 70, 20, 30, 40, 50, 60]
>>> list3.pop(1)
70
>>> list3
[10, 20, 30, 40, 50, 60]
>>> list4 = [10,20,30,40,40,40,50,60,70]
>>> list4
[10, 20, 30, 40, 40, 40, 50, 60, 70]
>>> list4.remove(40)
>>> list4
[10, 20, 30, 40, 40, 50, 60, 70]
- 索引、计数和列表长度:index()、count()、len()
1、index() :指定元素第一次出现在列表中的位置;格式 list.index(x[, start[, end]]) start和end参数非必要,start表示从第几个位置开始向后查找该元素在不在列表中,start~end 在这个范围内查找。
2、count() :指定元素在列表中出现的次数,不在返回0次
3、len() 返回列表长度。
>>> list4 = [10,10,20,20,30,30,40,50,19]
>>> list4
[10, 10, 20, 20, 30, 30, 40, 50, 19]
>>> list4.index(10,2)
Traceback (most recent call last):
File "<pyshell#128>", line 1, in <module>
list4.index(10,2)
ValueError: 10 is not in li
>>> list4.index(30,2,5)
4
>>> list4[4]
30
>>> list4.count(20)
2
>>> list4.count(90)
0
>>> len(list4)
9
>>> list = [20,30,10,50]
>>> list
[20, 30, 10, 50]
>>> list.sort() #顺序
>>> list
[10, 20, 30, 50]
>>> list.sort(reverse=True) #逆序
>>> list
[50, 30, 20, 10]
>>> list1 = [20,10,30,40]
>>> id(list1)
1971808272576
>>> list1 = sorted(list1)
>>> list1
[10, 20, 30, 40]
>>> id(list1) #地址发生改变
1971838081408
>>> list1 = [20,10,30,40]
>>> r = reversed(list1)
>>> r
<list_reverseiterator object at 0x000002CBC5736C70>
>>> list(r)
[40, 30, 10, 20]
#可用来当测试数据用
>>> import random
>>> random.shuffle(list1)
>>> list1
[10, 40, 30, 20]
>>> random.shuffle(list1)
>>> list1
[30, 40, 20, 10]
3、元组 tuple
3.1 创建元组
- 基本语法创建
- tuple() 创建
- 生成器推导式创建元组
生成器推导式生成的不是列表也不是元组,返回的是生成器对象,只能访问一次元素,再次访问为空,需要重新生成。
>>> a = (20,30,40,50)
>>> a
(20, 30, 40, 50)
>>> type(a)
<class 'tuple'>
>>> a = tuple()
>>> a
()
>>> b = tuple("abc")
>>> b
('a', 'b', 'c')
>>> s = (x * 2 for x in range(5))
>>> s
<generator object <genexpr> at 0x000002CBC57143C0>
>>> tuple(s)
(0, 2, 4, 6, 8)
>>> list(s)
[]
>>> s = (x * 2 for x in range(5))
>>> s.__next__()
0
>>> s.__next__()
2
>>> s.__next__()
4
>>> s.__next__()
6
>>> s.__next__()
8
>>> s.__next__()
Traceback (most recent call last):
File "<pyshell#49>", line 1, in <module>
s.__next__()
StopIteration
3.2 常见操作
与列表类似,除了增,删,插入,能改变元组元素的都不能用。
A2
类型 | 属于序列 | 切片方法 | 基本操作 | 元素是否可变 |
---|
列表 | 是 | 相同 | 相似 | 可变 | 元组 | 是 | 相同 | 相似 | 不可变 |
列表中元素可变,如果list(tuple)表示列表中的元素是元组则元组不能变 元组中元素不可变,如果tuple(list)表示元组中的元素是列表,则列表中的元素可变。
>>> a = [10,20,(30,40),50]
>>> a
[10, 20, (30, 40), 50]
>>> a[2] = 30
>>> a
[10, 20, 30, 50]
>>> a = [10,20,(30,40),50]
>>> a[2][1] = 50
Traceback (most recent call last):
File "<pyshell#59>", line 1, in <module>
a[2][1] = 50
TypeError: 'tuple' object does not support item assignment
>>> b = (10,20,[30,50],50)
>>> b
(10, 20, [30, 50], 50)
>>> b[2] = 40
Traceback (most recent call last):
File "<pyshell#65>", line 1, in <module>
b[2] = 40
TypeError: 'tuple' object does not support item assignment
>>> b[2][1] = 40
>>> b
(10, 20, [30, 40], 50)
>>>
|