Python | python基础(五) - 列表和元组
列表和元组
列表和元组是python中有用的有序集合!
列表list
列表是什么?
- list是一种有序集合,可以随时添加和删除其中的内容
可以理解为一般编程中 数组的概念
测试: 列出班级的所有同学的名字,就可以使用list 表示
>>> classmates = ['Mike','Michael','Bob']
>>> classmstes
['Mike','Michael','Bob']
如何获取列表元素?
🔺使用len()函数获取list元素个数
>>> len(classmates)
3
⚠️使用索引访问list中的每一个元素,索引是从0开始的
💁♂️一般编程中的索引都是从0开始的
对于上面的班级列表
>>> classmates[0]
Mike
>>> classmates[2]
Michael
>>> classmates[3]
traceback (most recent call last );
File "<stdin>",Line 1 ,in <module>
IndexError: List index out of range
为什么会报错?
当索引超出了范围,就会报错 IndexError
,所以要确保索引不要越界
因为索引从0开始,所以三个元素的索引是 0
,1
,2
没有3
!!!
可以倒着访问元素
classmates[-1]
Bob
classmates[-2]
Michael
和列表有关重要函数
- append()
- insert()
- pop()
1、append()
append: 中文: v.追加,附加
作用: 追加元素到末尾 (list是一个可变元素的有序列表)
▶Example: 向一个列表尾部添加元素
>>> classmates = ['mike','michael','bob']
>>> classmates.append('adam')
>>> classmates
['mike', 'michael', 'bob', 'adam']
2、insert()
语法:
# 格式
列表.insert(索引,元素)
# 实例
classmates.insert(1,'jack')
测试: 把元素插入到指定的位置
>>> classmates.insert(1,'jack')
>>> classmates
['mike', 'jack', 'michael', 'bob', 'adam']
⚠️ 插入到索引为1
的位置,后面元素从原来位置后移一位。
3、pop()
默认删除末尾元素,可以指定要删除元素(通过索引)
>>> classmates.pop()
'adam'
>>> classmates
['mike', 'jack', 'michael', 'bob']
如果要替换元素的值,可以直接使用赋值的语句
>>> classmates[2] = 'martin'
>>> classmates
['mike', 'jack', 'martin', 'bob']
⚠️ list中的元素类型可以不一样,这点和传统c语言数组有区别。
>>> MyList = [1,'nathan',True]
>>> MyList
[1, 'nathan', True]
嵌套列表
也可以用一个list充当一个list的元素,也就是嵌套list
如果嵌套一层,就是二维数组,嵌套两层,就是三维数组,以此类推,但是一般用当三维数组就够了
测试:
>>> S = ['python','java','javascript','php']
>>> len(s)
4
但是S嵌套一个list后
>>> S = ['python','java','javascript','php',['c','c++']]
注意此时的S列表只有4个元素
换一种写法,就明白了
>>> p = ['c','c++']
>>> S = ['python','java','javascript','php',P]
访问 c
就是
S[4,0]
访问 C ++
就是
S[4,1]
如果list中一个元素都没有,则是一个空list ,长度为0
>>> L =[]
>>> len(L)
0
元组tuple
元组是什么?
英文: tuple(n.元组,数组)
tuple和list非常类似,但是tuple不能够修改,一旦其初始化了之后
所以tuple没有什么append(),pop()...方法
为什么需要元组?
tuple的意义就是安全,稳定,所以如果尽可能的话,能使用tuple,就不要使用list
⚠️ 注意 列表用[ ]
;元组用( )
,表示
如何创建元组?
>>> Tuple = ('i','love','li')
>>> Tuple
('i', 'love', 'li')
>>> Tuple.append('too')
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
Tuple.append('too')
AttributeError: 'tuple' object has no attribute 'append'
当尝试在元组尾部添加元素,被告知:
AttributeError: 'tuple' object has no attribute 'append'
属性错误: 元组对象没有属性 ‘append’
但是还是可以访问 元组元素
>>> Tuple[1]
'love'
访问元组
元组和数组类似们可以通过索引
访问元素,可以进行截取,组合等
tup1 = ('美国','中国','1997','2000')
tup2 = (1,2,3,4,5,6)
print("tup1:",tup1[1]) # tup1: 中国
#也可以访问字符串中的一个字符
print("tup1:",tup1[1][1]) # tup1: 国
# 进行切片操作,获取索引1~索引3但不包括索引3的元素 [1,3)
print("tup1[1:3]",tup1[1:3]) # tup1[1:3] ('中国', '1997')
# 取索引 [0,5)
print("tup2[1:5]",tup2[1:5]) # tup2[1:5] (2, 3, 4, 5)
连接元组
⚠️虽然元组中的元素不能修改,但是对于元组整体可以增删
>>> tup1 = (1,2,3,4,6)
>>> tup2 = (6,7,8,9)
>>> tup3 = tup1 + tup2
>>> print("tup3:",tup3) # tup3: (1, 2, 3, 4, 6, 6, 7, 8, 9)
# 尝试修改元组 tup1[1] = 10
>>> tup1[1] = 10
Traceback (most recent call last):
File "<pyshell#51>", line 1, in <module>
tup1[1] = 10
TypeError: 'tuple' object does not support item assignment
TypeError: 'tuple' object does not support item assignment
类型错误: tuple对象不支持项目的分配
删除元组
可以使用del语句
,整体删除元组
>>> tup1 = ('中国','china','2000')
>>> print(tup1)
('中国', 'china', '2000')
>>> del tup1
>>> print(tup1)
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
print(tup1)
NameError: name 'tup1' is not defined
元组的运算符
元组和字符串一样们可以+
,*
,意味 能 组合
,复制
python 表达式 | 描述 | 结果 |
---|---|---|
len(1,2,3) | 计算元组元素的个数 | 3 |
(1,2,3) + (4,5,6) | 连接 | (1,2,3,4,5,6) |
('a','b') * 3 | 复制 | ('a','b','a','b','a','b') |
3 in (1,2,3) | 判断元素是否在 | True |
for x in (1,2,3,4): print(x,end=" ") |
遍历元组 | 1 2 3 4 |
python内置函数
-
len(tuple) 计算元素个数
-
min(tuple) 返回元素最小值
-
max(tuple) 返回元素最大值
-
tuple(seq) 将列表转化为 元组
⚠️ 注意是将返回值保存到一个变量中
tup = (1,2,34,45,678)
m =min(tup)
print(m) # 1
#定义一个列表
list = [1,2,3,4,5]
t = tuple(list)
print(t) # (1, 2, 3, 4, 5)
赋值元组
一次性的对多个变量赋值
(x,y,z) = (1,2,3) # 也可以 x,y,z =1,2,3
print(x,y,z) # 1 2 3
可以交换变量
x,y,z = z,y,x
print(x,y,z) # 3 2 1
元组和列表之间的转换
#元组 ->列表
# 列表对象 = list(元组对象)
>>> tup = (1,2,3,4,5)
>>> list1 = list(tup)
>>> print(list1)
[1, 2, 3, 4, 5]
#列表 -> 元组
# 元组对象 = tuple(列表对象)
>>> nums = [1,3,5,7,8,13,20]
>>> print(tuple(nums))
(1, 3, 5, 7, 8, 13, 20)
⚠️ 也是将返回值保存在一个变量中使用
>>> print(nums)
[1, 3, 5, 7, 8, 13, 20]
1、列表 -> str
nums = [1,2,3,4,5,7]
str1 = str(nums)
print('str1:',str1) #str1: [1, 2, 3, 4, 5, 7]
# 注意实际上是 '[1,2,3,4,5,6,7]' 的字符串
print(str1[2]) # ,
# 因为 逗号,是索引为2的字符
# 对比直接输出列表
print('nums:',nums) # nums: [1, 2, 3, 4, 5, 7]
print(nums[2]) # 3
2、连接字符串
num = ['美国','中国','瓷器','王国']
str2 ="%"
str2 = str2.join(num)
print('str2:',str2) # str2: 美国%中国%瓷器%王国
str3 = "--->"
str3 =str3.join(num)
print('str3:',str3) # str3: 美国--->中国--->瓷器--->王国
改变元组
不是说tuple不可变吗,那这个是怎么回事呢?
Example: 定义一个 tuple 含有三个元素 "a"
,"b"
,和一个list
>>> t = ('a','b',[1,2])
>>> t[2][0] = 'x'
>>> t[2][1] = 'y'
>>> t
('a', 'b', ['x', 'y'])
看来这样子,还是改变了tuple啊,肿么回事
tuple不能修改,不能改变指的是对于tuple来说的元素指向不变(地址)
一开始: 索引0,1,2指向 ‘a’,’b’,list
改变后: 索引0,1,2指向 ‘a’,’b’,list
变得是list的元素指向
!!!
总结提升
- list的访问是
[][]
,list是[]
- tuple的访问也是
[][]
,tuple是()
- 使用类似于数组的形式
[x][y]
请问以下变量哪些是tuple类型?
解答:答案为 a= ();d = (3,) ;e = (4,5,6)
因为()可以表示空元组, (3,)表示定义一个1个元素为3的元组
(4,5,6)则表示定义一个3个元素分别为4,5,6的元组
来源: 博客园
作者: 茶哩哩
文章: 转载请注明原文链接:https://www.cnblogs.com/martin-1/p/14854964.html