python基础08——列表与元组(补充:可变类型与不可变类型)

列表与元组的区别

  • 列表是动态数组,它们可变且可以重设长度(改变其内部元素的个数)。

  • 元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变。

  • 元组缓存于Python运行时环境,这意味着我们每次使用元组时无须访问内核去分配内存。

  • 可变与不可变性

  • 列表:可变

  • 元组:不可变

什么是可变类型与不可变类型?

可变数据类型 :当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型。

不可变数据类型: 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型。

可变数据类型:list(列表)、dict(字典)、set(集合,不常用)

# 列表
li = [1, 2, 3, 4, 5]
print(li, id(li))
# 输出 [1, 2, 3, 4, 5] 2327543017024
li.append(6)
print(li, id(li))
# 输出 [1, 2, 3, 4, 5, 6] 2327543017024

# 字典
a = {'数学': 95}
print(a, id(a))
# 输出 {'数学': 95} 1494771760896
a['语文'] = 89
print(a, id(a))
# 输出 {'数学': 95, '语文': 89} 1494771760896
a.update({'英语': 90})
print(a, id(a))
# 输出 {'数学': 95, '语文': 89, '英语': 90} 1494771760896

# 集合
a = {1,2,3}
print(a, id(a))
# 输出 {1, 2, 3} 2144380465920
a.add(4)
print(a, id(a))
# 输出 {1, 2, 3, 4} 2144380465920

不可变数据类型:数值类型(int、float、bool)、string(字符串)、tuple(元组)

# 数值
num = 1
print(num, id(num))
# 输出 1 1372779708656
num = num + 1
print(num, id(num))
# 输出 2 1372779708688

# 字符串
string = 'aaa'
print(string, id(string))
# 输出 aaa 2327542972528
string = string.upper()
print(string, id(string))
# 输出 AAA 2327542955952

# 元组
tup = (1, 2, 3, [4, 5])
print(tup, id(tup))
# 输出 (1, 2, 3, [4, 5]) 2327543326864
tup[-1].append(6)
print(tup, id(tup))
# 输出 (1, 2, 3, [4, 5, 6]) 2327543326864

列表

列表的创建

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。

# 使用 [ ] 直接创建列表
li = [1,2,3,4,"张三","李四"]
# 使用 list() 函数创建列表
li2 = list('123456789')
列表可以⼀次性存储多个数据,且可以为不同数据类型

列表的常用操作

列表的作用是⼀次性存储多个数据,程序员可以对这些数据进行的操作有:增、删、改、查等等。

访问列表中的值

根据索引访问列表元素
使用索引访问列表元素的格式为:
listname[i]

name_list = ['张三', '李四', '王五','赵六']
print(name_list[0])
print(name_list[1])
print(name_list[2])
根据切片访问列表元素
使用切片访问列表元素的格式为:
listname[start : end : step]
name_list = ['张三', '李四', '王五','赵六']
print(name_list[0:4:2])
通过内置函数返回列表下标
  • index():返回指定数据所在位置的下标 。

语法

# 列表序列.index(数据, 开始位置下标, 结束位置下标)
name_list = ['张三', '李四', '王五','赵六']
print(name_list.index('张三', 0, 2))
注意:如果查找的数据不存在则报错。
  • count():统计指定数据在当前列表中出现的次数。

name_list = ['张三', '李四', '王五','张三']
print(name_list.count('张三'))
  • len():访问列表长度,即列表中数据的个数。

name_list = ['张三', '李四', '王五','赵六']
print(name_list.count('Tom'))
in与not in
in:判断指定数据在某个列表序列,如果在返回True,否则返回False
not in:判断指定数据不在某个列表序列,如果不在返回True,否则返回False
name_list = ['张三', '李四', '王五','赵六']
name = input('请输⼊您要搜索的名字:')
if name in name_list:
    print(f'您输⼊的名字是{name}, 名字已经存在')
else:
    print(f'您输⼊的名字是{name}, 名字不存在')

列表添加元素

作⽤:增加指定数据到列表中。
append()方法用于在列表的末尾追加元素

语法

# 列表序列.append(数据)
name_list = ['张三', '李四', '王五','赵六']
name_list.append('阿坤')
print(name_list)
如果append()追加的数据是⼀个序列,则追加整个序列到列表
name_list = ['张三', '李四', '王五','赵六']
alist = ["唱","跳","rap","篮球"]
name_list.append(alist)
print(name_list)
# ['张三', '李四', '王五', '赵六', ['唱', '跳', 'rap', '篮球']]
extend()方法用于在列表的末尾追加或者扩展元素
列表结尾追加数据,如果数据是⼀个序列,则将这个序列的数据逐⼀添加到列表。
name_list = ['张三', '李四', '王五','赵六']
name_list.extend('阿坤')
print(name_list)
# ['张三', '李四', '王五', '赵六', '阿', '坤']
如果添加一个序列,则会将序列里面每一个元素添加进去
name_list = ['张三', '李四', '王五','赵六']
alist = ["唱","跳","rap","篮球"]
name_list.extend(alist)
print(name_list)
insert()指定位置新增数据。

语法

# 列表序列.insert(位置下标, 数据)
name_list = ['张三', '李四', '王五','赵六']
name_list.insert(1, '阿坤')
# 结果:['张三','阿坤', '李四', '王五','赵六']
print(name_list)

删除列表元素

del
  • 是 Python 中的关键字,专门用来执行删除操作,它不仅可以删除整个列表,还可以删除列表中的某些元素。

name_list = ['张三', '李四', '王五','赵六']
del name_list
print(name_list)

删除指定数据(根据索引删除)

name_list = ['张三', '李四', '王五','赵六']
del name_list[1]
print(name_list)
# ['张三', '王五', '赵六']
pop()

删除指定下标的数据(默认为最后⼀个),并返回该数据。

name_list = ['张三', '李四', '王五','赵六']
name_list.pop(1)
print(name_list)
# ['张三', '王五', '赵六']
remove()

根据元素值进行删除移除列表中某个数据的第⼀个匹配项。

# 列表序列.remove(数据)
name_list = ['张三', '李四', '王五','赵六']
name_list.remove("张三")
print(name_list)
# ['李四', '王五', '赵六']
clear()

清空列表

name_list = ['张三', '李四', '王五','赵六']
name_list.clear()
print(name_list)
# []

修改列表元素

Python 支持通过切片语法给一组元素赋值。在进行这种操作时,如果不指定步长(step 参数),Python 就不要求新赋值的元素个数与原来的元素个数相同;这意味,该操作既可以为列表添加元素,也可以为列表删除元素。

修改单个与一组元素
name_list = ['张三', '李四', '王五','赵六']
name_list[0] = '阿坤'
print(name_list)

nums = [40, 36, 89, 2, 36, 100, 7]
#修改第 1~4 个元素的值(不包括第4个元素)
nums[1: 4] = [45.25, -77, -52.5]
print(nums)
reverse()函数的使用

逆置

num_list = [1, 5, 2, 3, 6, 8]
num_list.reverse()
print(num_list)
# [8, 6, 3, 2, 5, 1]
sort()函数的使用

排序语法

reverse表示排序规则,reverse = True 降序, reverse = False 升序(默认)
# 列表序列.sort(reverse=False)
li = [2,3,5,6,1,4,8]
li.sort(reverse=False)
print(li)
# [1, 2, 3, 4, 5, 6, 8]

li.sort(reverse=True)
print(li)
# [8, 6, 5, 4, 3, 2, 1]

列表的复制

copy()函数的使用

复制一个列表

name_list = ['张三', '李四', '王五','赵六']
name_li2 = name_list.copy()
print(name_li2)
# ['张三', '李四', '王五','赵六']

列表的循环遍历

依次打印列表中的各个数据

for循环

name_list = ['张三', '李四', '王五','赵六']
for i in name_list:
    print(i)

while循环

i = 0
name_list = ['Tom', 'Lily', 'Rose']
while i < len(name_list):
    print(name_list[i])
    i += 1

列表的嵌套

所谓列表嵌套指的就是⼀个列表⾥⾯包含了其他的⼦列表
# 找到篮球
name_list = [['张三', '李四', '阿坤'], ['唱', '跳', '篮球'], ['甲', '乙', '丙']]
# 第⼀步:按下标查找到篮球所在的列表
print(name_list[1])
# 第⼆步:从李四所在的列表⾥⾯,再按下标找到数据李四
print(name_list[1][2])

元组

元组的创建

Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

使用 ( ) 直接创建
# 多个数据元组
t1 = (10, 20, 30)
# 单个数据元组
t2 = (10,)
使用tuple()函数创建元组
tup1 = tuple("hello")
print(tup1)
注意:如果定义的元组只有⼀个数据,那么这个数据后⾯也好添加逗号,否则数据类型为唯⼀的这个数据的数据类型

元组的常⻅操作

元组数据不⽀持修改,只⽀持查找,具体如下

查找

根据下标查找
tuple1 = ('aa', 'bb', 'cc', 'bb')
print(tuple1[0])
index()

查找某个数据,如果数据存在返回对应的下标,否则报错,语法和列表、字符串的index⽅法相同。

tuple1 = ('aa', 'bb', 'cc', 'bb')
print(tuple1.index('aa'))

统计

count()

统计某个数据在当前元组出现的次数。

tuple1 = ('aa', 'bb', 'cc', 'bb')
print(tuple1.count('bb'))

len():

统计元组中数据的个数。

tuple1 = ('aa', 'bb', 'cc', 'bb')
print(len(tuple1))

元组内的直接数据如果修改则⽴即报错

但是如果元组⾥⾯有列表,修改列表⾥⾯的数据则是⽀持的。

tuple2 = (10, 20, ['aa', 'bb', 'cc'], 50, 30)
print(tuple2[2]) # 访问到列表
# ['aa', 'bb', 'cc']
tuple2[2][0] = 'aaaaa'
print(tuple2)
# (10, 20, ['aaaaa', 'bb', 'cc'], 50, 30)

删除

del

当创建的元组不再使用时,可以通过 del 关键字将其删除

tup = ("python","yyds")
print(tup)
del tup
print(tup)

全套python资料请前往主页: python全家桶_银色晨曦的博客-CSDN博客

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值