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

和列表有关重要函数

  1. append()
  2. insert()
  3. 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啊,肿么回事

image

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的元组

posted @ 2021-06-06 11:56  茶哩哩  阅读(375)  评论(0编辑  收藏  举报