python之列表和元组

本文介绍了Python中的序列,特别是列表和元组的概念、创建方式和常见操作。列表作为可变序列,支持多种增删改查操作,如append、insert、del等,而元组作为不可变序列,不支持改变元素的操作。此外,还探讨了两者的内存存储方式和它们在序列中的位置。
摘要由CSDN通过智能技术生成

前置疑问:

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']
  • list()创建
>>> 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()
方法说明区别
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

  • 特性:
    元素大小可变

  • 列表切片
    同字符串的切片方法

  • 列表排序
    1、sort():原地排序
    2、sorted():新建列表排序
    3、reversed()返回迭代器,反转列表,不对原列表进行修改,仅返回逆排序的迭代器对象
    4、random.shuffle() 随机排序

>>> 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)
>>> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值