Python之列表与元组

标题

一、列表

1.列表的创建

li = []
print(li, type(li))
li1 = [1]
print(li1, type(li1))

执行结果:
在这里插入图片描述

2.列表的基本特性

1. 连接操作符和重复操作符
print([1, 2] + [2, 3])  # [1, 2, 2, 3]
print([1, 2] * 3)       # [1, 2, 1, 2, 1, 2]

2. 成员操作符(in, not in)
print(1 in [1, 2, 3])   # True
"""
布尔类型:
    True: 1
    False:0
"""
print(1 in ["a", False, [1, 2]])  # False

3. 索引
li = [1, 2, 3, [1, 'b', 3]]
print(li[0])  # 1
print(li[-1]) # [1, 'b', 3]
print(li[-1][0])  # 1
print(li[3][-1])  # 3

4. 切片
li = ['172', '25', '254', '100']
print(li[:2])
print(li[1:])
print(li[::-1])
需求: 已知['172', '25', '254', '100'], 输出: "100-254-25"
li = ['172', '25', '254', '100']
print("-".join(li[1:][::-1]))

5. for循环
subjects = ["语文", '数学', '英语']
for subject in subjects:
    print(f"科目有:{subject}")

注意:这里1和true等价,0和false等价
执行结果:
在这里插入图片描述

3.列表的常用方法

1. 增加
1-1). 追加
li = [1, 2, 3]
li.append(4)
print(li)
1-2). 在列表开头添加
li = [1, 2, 3]
li.insert(0, 'cat')
print(li)
1-2). 在索引2前面添加元素cat
li = [1, 2, 3]
li.insert(2, 'cat')
print(li)
1-3). 一次追加多个元素
li = [1, 2, 3]  # 添加456
li.extend([4, 5, 6])
print(li)

2. 修改: 通过索引和切片重新赋值的方式。
li = [1, 2, 3]
li[0] = 'cat'
li[-1] = 'westos'
print(li)
li = [1, 2, 3]
li[:2] = ['cat', 'westos']
print(li)

3. 查看: 通过索引和切片查看元素。 查看索引值和出现次数。
li = [1, 2, 3, 1, 1, 3]
print(li.count(1))   # 3
print(li.index(3))   # 2

4. 删除
4-1). 根据索引删除
li = [1, 2, 3]
将pop方法的结果存储到delete_num变量中。
delete_num = li.pop(-1)
print(li)
print("删除的元素是:", delete_num)

4-2). 根据value值删除
li = [1, 2, 3]
li.remove(1)
print(li)

4-3). 全部清空
li = [1, 2, 3]
li.clear()
print(li)


5. 其他操作
li = [18, 6, 99, 56]
li.reverse()  # 类似于li[::-1]
print(li)

sort排序默认由小到大。 如果想由大到小排序,设置reverse=True
li.sort(reverse=True)
print(li)

li1 = li.copy()
print(id(li), id(li1))
print(li, li1)

执行结果:
在这里插入图片描述

二、元组

1.元组的操作

元组tuple(戴了紧箍咒的列表, 不能修改元素)
1. 元组的创建
t1 = ()    # 空元组
print(t1, type(t1))
t2 = (1,)   # 重要(易错点):元组只有一个元素时一定要加逗号
print(t2, type(t2))
t3 = (1, 1.2, True, [1, 2, 3])
print(t3, type(t3))

2. 特性
print((1, 2, 3) + (3,))
print((1, 2, 3) * 2)
print(1 in (1, 2, 3))
t = (1, 2, 3)
print(t[0])
print(t[-1])
print(t[:2])
print(t[1:])
print(t[::-1])

3. 常用方法: 元组是不可变数据类型(不能增删改)
查看: 通过索引和切片查看元素。 查看索引值和出现次数。
t = (1, 2, 3, 1, 1, 3)
print(t.count(1))   # 3
print(t.index(3))   # 2

执行结果:
在这里插入图片描述

2.命名元组的操作

tuple = ("westos", 18, "西安")
print(tuple[0], tuple[1], tuple[2])

从collections模块中导入namedtuple工具。
from collections import  namedtuple
1. 创建命名元组对象User
User = namedtuple('User', ('name', 'age', 'city'))
2. 给命名元组传值
user1 = User("westos", 18, "西安")
3. 打印命名元组
print(user1)
4. 获取命名元组指定的信息
print(user1.name)
print(user1.age)
print(user1.city)

执行结果:
在这里插入图片描述

三、is和==的区别

"""
    ==: 类型和值是否相等
    is: 类型和值是否相等, 内存地址是否相等
"""
print(1 == '1')   # False
li = [1, 2, 3]
li1 = li.copy()
print(li == li1)  # True

# 查看内存地址
print(id(li), id(li1))
print(li is li1)  # False

执行结果:
在这里插入图片描述

四、地址引用和深拷贝和浅拷贝

# 1. 值的引用
nums1 = [1, 2, 3]
nums2 = nums1
nums1.append(4)
print(nums2)   # 1, 2, 3, 4


# 2. 拷贝:浅拷贝和深拷贝
# 2-1). 浅拷贝
n1 = [1, 2, 3]
n2 = n1.copy()   # n1.copy和n1[:]都可以实现拷贝。
print(id(n1), id(n2))
n1.append(4)
print(n2)


# 2-2). 深拷贝
"""
可变数据类型(可增删改的): list
不可变数据类型:数值,str, tuple, namedtuple
"""
n1 = [1, 2, [1, 2]]
n2 = n1.copy()
# n1和n2的内存地址:的确拷贝了
print(id(n1), id(n2))
# n1[-1]和n2[-1]的内存地址:
print(id(n1[-1]), id(n2[-1]))
n1[-1].append(4)
print(n2)

执行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/nk298120/article/details/113841817