五大数据容器的分类、应用场景以及sorted排序

本文介绍了Python中的数据容器,如列表、元组、字符串、集合和字典,分别阐述了它们对下标索引、重复元素及可修改性的支持情况,并给出了各自的应用场景。此外,还展示了如何进行len()求元素个数、max()和min()找出最大和最小元素,以及不同容器间的类型转换操作,如转为列表、元组、字符串和集合,并通过sorted()进行排序。

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

数据容器可以从以下视角进行简单的分类:
·是否支持下标索引
    ·支持:列表、元组、字符串-序列类型.不支持:集合、字典﹣非序列类型
    ·是否支持重复元素:
    ·支持:列表、元组、字符串﹣序列类型·不支持:集合、字典﹣非序列类型
·是否可以修改
    ·支持:列表、集合、字典
    .不支持:元组、字符串
应用场景
1.基于各类数据容器的特点,它们的应用场景如下:
    ·列表:一批数据,可修改、可重复的存储场景
    ·元组:一批数据,不可修改、可重复的存储场景
    ·字符串:一串字符串的存储场景
    ·集合:一批数据,去重存储场景
    ·字典:一批数据,可用 Key 检索 Value 的存储场景
#通用操作
my_list = [1,2,4,6,3,5]
my_touple = (1,2,3,6,4)
my_str = "abcdefg"
my_set = {1,2,3,4,5,6,7}
my_dict = {"key1":1,"key2":2,"keys3":3,"key4":4,"key5":5,"keys6":6}

# len元素个数
print(f"列表的元素个数有:{len(my_list)}")
print(f"元组的元素个数有:{len(my_touple)}")
print(f"字符串的元素个数有:{len(my_str)}")
print(f"集合的元素个数有:{len(my_set)}")
print(f"字典的元素个数有:{len(my_dict)}")
print("----------")
# max最大元素
print(f"列表最大元素是:{max(my_list)}")
print(f"元组最大元素是:{max(my_touple)}")
print(f"字符串最大元素是:{max(my_str)}")
print(f"集合最大元素是:{max(my_set)}")
print(f"字典最大元素是:{max(my_dict)}")
print("----------")
# min最小元素
print(f"列表最小元素是:{min(my_list)}")
print(f"元组最小元素是:{min(my_touple)}")
print(f"字符串最小元素是:{min(my_str)}")
print(f"集合最小元素是:{min(my_set)}")
print(f"字典最小元素是:{min(my_dict)}")
print("----------")
# 类型转换:容器转列表
print(f"列表转列表的结果是:{list(my_list)}")
print(f"元组转列表的结果是:{list(my_touple)}")
print(f"字符串转列表的结果是:{list(my_str)}")
print(f"集合转列表的结果是:{list(my_set)}")
print(f"字典转列表的结果是:{list(my_dict)}")
print("----------")
# 类型转换:容器转元组
print(f"列表转列元组的结果是:{tuple(my_list)}")
print(f"元组转元组的结果是:{tuple(my_touple)}")
print(f"字符串转元组的结果是:{tuple(my_str)}")
print(f"集合转元组的结果是:{tuple(my_set)}")
print(f"字典转元组的结果是:{tuple(my_dict)}")
print("----------")
#类型转换:容器转字符串
print(f"列表转字符串的结果是:{str(my_list)}")
print(f"元组转字符串的结果是:{str(my_touple)}")
print(f"字符串转字符串的结果是:{str(my_str)}")
print(f"集合转字符串的结果是:{str(my_set)}")
print(f"字典转字符串的结果是:{str(my_dict)}")
print("----------")
#类型转换:容器转集合
print(f"列表转集合的结果是:{set(my_list)}")
print(f"元组转集合的结果是:{set(my_touple)}")
print(f"字符串转集合的结果是:{set(my_str)}")
print(f"集合转集合的结果是:{set(my_set)}")
print(f"字典转集合的结果是:{set(my_dict)}")
print("----------")
# sorted排序,sorted(容器,[reverse = true]),排序结果会全部变为列表
print(f"列表对象的排序结果是:{sorted(my_list,reverse = True)}")  #reverse = true表示反向排序
print(f"元组对象的排序结果是:{sorted(my_touple)}")
print(f"字符串对象的排序结果是:{sorted(my_str)}")
print(f"集合对象的排序结果是:{sorted(my_set)}")
print(f"字典对象的排序结果是:{sorted(my_dict)}")

# 字符串是如何进行大小比较的,按位比较,只要有一位大,那么整体就大,通过ASCll比较
# 比较abc abd
print(f"abc大于abd,结果:{'abc' > 'abd'}")

# a 比较 ab
print(f"ab大于a,结果:{'ab' > 'a'}")

### Redis 支持的五种数据类型 #### 1. 字符串 (String) 字符串是最基本的数据类型,在 Redis 中,字符串可以是纯文本形式也可以是二进制安全的。除了作为普通的键值对存储外,还可以执行一些额外的操作,比如设置过期时间和原子性的递增/递减数值。 ```python SET key value # 设置指定key对应的value GET key # 获取指定key对应的value INCR key # 将key所储存的值加一 DECR key # 将key所储存的值减一 ``` 这种类型的性能非常高效,因为所有的操作都是 O(1),即常数时间内完成[^1]。 #### 2. 列表 (List) 列表是以链表的形式来保存一组按顺序排列的字符串元素。可以通过命令向列表两端添加新成员或将现有成员弹出。这对于构建队列或栈非常有用。 ```python LPUSH mylist "item1" # 向mylist左侧插入项目 RPUSH mylist "item2" # 向mylist右侧插入项目 LPOP mylist # 移除并返回mylist的第一个元素 RPOP mylist # 移除并返回mylist最后一个元素 LRANGE mylist start stop # 返回mylist中start到stop之间的元素 ``` 由于内部实现了双向链表结构,所以即使是在大型列表里也能快速访问头部和尾部节点。 #### 3. 集合 (Set) 集合是一组无序且不重复的字符串项组成的容器。提供了诸如交集、并集以及差集等丰富的集合运算功能。非常适合用来做唯一性验证或者社交网络中的好友关系管理等工作。 ```python SADD userset user1 # 添加一个member到set中 SMEMBERS userset # 查看整个set的内容 SISMEMBER userset member # 测试某个member是否存在于此set内 SINTER set1 set2 # 计算两个sets之间共同拥有的members ``` 这些操作大多能在平均情况下达到O(n)复杂度级别,其中n代表参与计算的最大集合大小[^5]。 #### 4. 哈希表 (Hash) 哈希表由字段(field)-值(value)对构成,类似于其他编程语言里的字典(Dictionary)/关联数组(Associative Array)概念。适用于表示对象属性及其对应值的关系模型。 ```python HSET person name "Alice" # 给person这个hash增加name->"Alice" HGET person name # 取得person hash下的name field对应的value HMSET person age 28 city BJ # 批量更新多个fields-values组合 HGETALL person # 获得所有field-value对 ``` 当涉及到大量记录时,相比于直接使用大量的独立keys更加节省空间,并且提高了批量处理效率[^2]。 #### 5. 有序集合 (Sorted Set) 有序集合不仅能够保持成员的独特性和不可变性,还能按照分数(score)来进行排序展示。因此非常适合于排行榜之类的场景应用。 ```python ZADD leaderboard 90 playerA # 插入playerA的成绩为90分 ZRANK leaderboard playerB # 查询playerB在整个leaderboard上的位置 ZSCORE leaderboard playerC # 得知playerC的具体得分情况 ZRANGEBYSCORE leaderboard min max # 提取score介于min-max范围内的players名单 ``` Redis 使用跳跃表(Skip List)而非传统意义上的平衡树(Balanced Tree)实现该特性,从而简化了算法逻辑的同时也保证了高效的查找速度[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值