Python学习笔记:容器型数据类型之总结

本文总结了Python中的容器型数据类型,包括可变性、有序性及共同点。列表、元组和字符串是有序的,而集合和字典是无序的。文中介绍了如何同时遍历两个容器,以及不同类型间的转换方法,如列表、字符串、元组、集合和字典之间的转换。此外,还提供了实例,如杨辉三角形、随机验证码生成、折半查找、去重和找出现次数最多的元素等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Python中容器型数据类型有 列表元组字符串集合字典

可变性

列表集合字典是可变的,元组字符串不可变。集合支持添加、删除元素操作,不支持修改操作,因为集合是无序的,不能使用下标访问元素。列表字典支持增删改查操作,列表可以通过遍历整个列表,获取所有元素,也可以通过下标获取指定元素;字典通过键获取对应的值,也可以通过遍历字典获取键值对。元组字符串不支持增删改操作。

# 列表
list1 = ['apple', 'banana', 'pear', 'peach', 'apple']
nums = [100, 15, 20]
# 追加元素
list1.append('strawberry')
# 插入元素
list1.insert(1, 'watermelon')
print(list1)
# 修改元素
list1[0] = 'grape'
print(list1)
# 删除元素
print(nums.pop())    # 删除最后一个元素
nums.pop(0)          # 根据下标删除指定元素
print(nums)
# 清空元素
list1.clear()
print(list1)

# 集合
set1 = {'apple', 'banana', 'pear', 'peach', 'apple'}
# 添加元素
set1.add('strawberry')
print(set1)
# 删除元素
set1.discard('banana')   # 指定元素删除
print(set1.pop())        # 随机删除
print(set1)
# 清空元素
set1.clear()
print(set1)

# 字典
price = {'apple': 7, 'banana': 5, 'pear': 3.5, 'peach': 5}
# 添加键值对
price['grape'] = 15
# 修改值
price['apple'] = 6.5
# 删除键值对
print(price.pop('banana'))
print(price)
del price['pear']
print(price)
# 清空键值对
price.clear()
print(price)

有序性

列表元组字符串有序的,可以通过下标查找元素。列表可以通过遍历整个列表,获取所有元素,也可以通过下标获取指定元素;字典集合无序的,不能通过下标获取元素。字典可以通过遍历字典获取键值对,也可以通过遍历字典的键、或值获取值,还可以通过遍历键值对获取键值对;集合可以通过遍历整个集合获取元素。

# 列表
list1 = ['apple', 'banana', 'pear', 'peach', 'apple']
# 下标操作
print(list1[0], list1[-2])

# 元组
tuple1 = ('apple', 'banana', 'pear', 'peach', 'apple')    
# 下标操作
print(tuple1[2], tuple1[-3])

# 字符串
str1 = 'i love eating oranges very much'
# 下标操作
print(str1[7])

列表,元组和字符串都支持两种循环遍历,一种是直接遍历(遍历整个列表、元组、字符串),另一种是遍历元素下标,通过下标获取元素值。并且列表、元组、字符串支持切片操作,此处不再详述。

# 字典
price = {'apple': 7, 'banana': 5, 'pear': 3.5, 'peach': 5}
# 通过键获取值
print(price['pear'])
# 循环遍历
# 循环遍历键值对获取键和值
for fruit, value in price.items():
    print(fruit, value)
# 循环遍历键,获取值
for fruit in price:
    print(fruit, price[fruit])
# 循环遍历值,获取值
for value in price.values():
    print(value)

# 集合
set1 = {'apple', 'banana', 'pear', 'peach', 'apple'}
# 循环遍历元素(无序)
for fruit in set1:
    print(fruit)

共同点

  • 可以把元组看成不可变的列表。列表中除了元素的增删改外,其他的操作元组几乎都适用。

  • 集合与字典都是可变的、无序的。

  • 元组和字符串都是不可变的、有序的。

同时遍历两个容器的元素

使用zip函数将两个容器压缩

items1 = zip('ABCDE', '12345')
for a, b in items1:
    print(a, b)

运行结果

A 1
B 2
C 3
D 4
E 5

容器型数据类型之间的转换

要把列表转换为字符串,需要用到''.join()函数,单引号中的字符为连接方式,括号里面放需要转换的类型。

list1 = ['apple', 'banana', 'pear', 'peach', 'apple']
# 列表转为字符串
str2 = ','.join(list1)
print(str2)

运行结果

apple,banana,pear,peach,apple

要把字符串转为列表,可以使用list()函数

str1 = 'i love eating oranges very much'
# 字符串转为列表
list2 = list(str1)
print(list2)

运行结果

['i', ' ', 'l', 'o', 'v', 'e', ' ', 'e', 'a', 't', 'i', 'n', 'g', ' ', 'o', 'r', 'a', 'n', 'g', 'e', 's', ' ', 'v', 'e', 'r', 'y', ' ', 'm', 'u', 'c', 'h']

列表转元组使用tuple()函数,元组转列表使用list()函数

list1 = ['apple', 'banana', 'pear', 'peach', 'apple']
tuple1 = ('apple', 'banana', 'pear', 'peach', 'apple')
# 元组转列表
tuple2 = list(tuple1)
# 列表转元组
list2 = tuple(list1)
print(tuple2)
print(list2)

可以使用集合对列表元素去重

list1 = ['apple', 'banana', 'pear', 'peach', 'apple']
set1 = set(list1)
print(set1)
list2 = list(set1)
print(list2)

运行结果

{'pear', 'peach', 'banana', 'apple'}
['pear', 'peach', 'banana', 'apple']

例题

杨辉三角形

输出一个10行的杨辉三角形:

result = [[] for _ in range(10)]
for i in range(len(result)):
    if i == 0:
        result[i].append(1)
    else:
        result[i].append(1)
        for j in range(1, i):
            result[i].append(result[i - 1][j] + result[i - 1][j - 1])
        result[i].append(1)
for index, i in enumerate(result):
    for j in i:
        print(f'{j:<6}', end='')
    print()

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

生成10组随机验证码

生成10组由4位数字和字母构成的随机验证码

import random
import string
str_ = string.digits + string.ascii_letters
# str_ = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
for _ in range(10):
    # 随机抽取4个字符
    verify = random.choices(str_, k=4)
    print(''.join(verify))

折半查找

有一个从小到大排列的整数列表,找某个元素,找到了返回下标,没找到输出“找不到该数据”。

nums = [12, 21, 35, 48, 55, 62, 79, 87, 95, 100]
low = 0
high = len(nums) - 1
search = int(input('请输入查找的数据:'))
while True:
    if low == high - 1:
        print('找不到该元素')
        break
    mid = (low + high) // 2
    if search < nums[mid]:
        high = mid
    elif search > nums[mid]:
        low = mid
    else:
        print(mid)
        break

去重

一个列表中有很多重复元素,写一段代码去掉列表中的重复元素。

nums = [10, 10, 2, 21, 10, 21, 50, 48, 37, 9, 0, 10, 21]
unique_nums = []
for i in nums:
    if i not in unique_nums:
        unique_nums.append(i)
print(unique_nums)

思路:建一个新的空列表,遍历原列表,如果原列表中的元素没有在空列表里,就将其加入到空列表中,这样就实现了去重。

学习了集合之后,也可以用集合给列表去重,但是,元素顺序会有所改变,这时就要看题目有没有要求不改变原列表的元素顺序了。

找出现次数最多的元素

有一个放整数的列表,找出列表中出现次数最多的元素

nums = [10, 10, 2, 21, 10, 21, 50, 48, 37, 9, 0, 10, 21, 10, 21, 50, 48, 21, 37, 56, 50]
# 出现次数最多的元素可能不止一个,可以将出现次数最多的加入到一个列表中
# 假定第一个数出现次数最多
item, max_counter = [nums[0]], nums.count(nums[0])
for num in nums:
    # 出现次数比当前列表中的元素出现次数大的,就清空列表,将这个数加入到列表,并更新最大次数的值
    if nums.count(num) > max_counter:
        item.clear()
        item.append(num)
        max_counter = nums.count(num)
    # 出现次数与当前列表中的元素出现次数相等的,把这个数加入列表
    elif nums.count(num) == max_counter:
        if num not in item:
            item.append(num)
for i in item:
    print(i)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

better meˇ:)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值