机器学习 vue组件 angularjs pyspark ros 打印 stack vue全局组件 管理后台框架 pmp视频 spark算法 ps字体旋转角度 linux查看jdk安装路径 matlab自然对数 java不定长数组 python编程 表白网页源码 python随机数 python对象 python文件操作 java编译 java使用正则表达式 java入门课程 java匿名函数 php项目实例 python 教程 音频频谱分析软件 圆形截图 ram容量是什么意思 tableau下载 pr视频加速 php递归 免费图片文字识别软件 c语言从入门到精通 屏幕录像专家注册机 cdlinux教程 sqlprompt jquery下载 勇敢者的游戏3 刷机精灵pc版 显卡怎么设置
当前位置: 首页 > 学习教程  > 编程语言

python —— 内置数据结构集合与字典

2021/2/13 20:24:49 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

内置数据结构集合与字典 目录 内置数据结构集合与字典 脑图 集合 集合的操作: 集合练习 随机数: 两数之和: 无重复最长子串: 字典 字典的操作: 字典的拓展 defaultdictionary: 脑图 集合 集合…

内置数据结构集合与字典

目录

内置数据结构集合与字典

脑图

集合

集合的操作:

集合练习

随机数:

两数之和:

无重复最长子串:

字典

字典的操作:

字典的拓展 defaultdictionary:


脑图

集合

集合的操作:

# 1. 集合的创建
s = {1, 2, 3, 1, 2, 3} # {1, 2, 3}
print(s, type(s))
# 注意点1: 集合的元素必须时不可变数据类型。
# s = {1, 2, 3, [1, 2, 3]}
# print(s, type(s))
# 注意点2:空集合不能使用{}, 而要使用set()
# s = {}
# print(s, type(s))
s  = set()
print(s, type(s))

# 2. 集合的特性:
# 不支持+,*, index, slice(因为集合无序不重复的)
# 支持in和not in
print(1 in {1, 2, 3, 4})


# 3. 集合的常用操作
# 3-1). 增加
#       add: 添加单个元素
#       update: 添加多个元素
s = {1, 2, 3}
s.add(100)
print(s)
s = {1, 2, 3}
s.update({4, 5, 6})
print(s)


# 3-2). 删除
#       remove: 如果元素存在,删除,否则报错
#       discard: 如果元素存在,删除,否则do nothing
#       pop: 随机
#       删除元素,集合为空则报错
s = {1, 2, 3}
s.remove(3)
print(s)
s = {1, 2, 3}
s.discard(100)
print(s)
s = {1, 66, 2,99, 78, 3}
s.pop()
print(s)


# 3-3). 查看
#           差集: s1 - s2
#           交集: s1 & s2
#           对称差分: s1 ^ s2
#           并集: s1 | s2
s1 = {1, 2, 3}
s2 = {1, 2}
print(s1 - s2)  # {3}
print(s1 & s2)  # {1, 2}
s1 = {1, 2, 3}
s2 = {1, 2, 4}
print(s1 ^ s2)  # {3, 4}, {1, 2, 3, 4} - {1, 2} = {3,4}
print(s1 | s2)  # {1, 2, 3, 4}
print(s1.issubset(s2))  # False
print(s1.isdisjoint(s2)) # False


# 4. 拓展: frozenset不可变的集合
s = frozenset({1, 2, 3})
print(s, type(s))

集合练习

随机数:

import random

# 定义一个空集合 s
s = set()
# 产生N个数
for num in range(15):
    # 随机生成1~1000的数,并添加到集合
    s.add(random.randint(1, 1000))

print(sorted(s, reverse=True))
# 对集合中的元素进行重新排序,默认升序,reverse=True,降序,返回的数据结构是列表
s = sorted(s, reverse=True)
print(s, "\n", type(s))

两数之和:

#输入一个一维数组,每个数之间使空格隔开
arr = input("输入数组:")
#将输入每个数以空格键隔开做成数组
nums = [int(n) for n in arr.split()]
print(nums,type(nums))
target = int(input("输入 target 的值:"))
#len(nums) 以列表的长度作为循环的变量,作为列表下标,遍历列表,类似C语言冒泡排序
for num_1 in range(len(nums)):
    #第二个数的下标,从第一个数下标+1开始,实现一个元素只用一次
    for num_2 in range(num_1+1,len(nums)):
        #两元素之和等于targe,返回这两个元素的下标
        if nums[num_1] + nums[num_2] == target :
            print(f"相加等于{target}的元素下标有: ",num_1,num_2)
# else:
#     print(f"数组中没有相加等于{target}")

无重复最长子串:

"""
需求:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
思路:滑动窗口,将输入的字符串,用可变数据结构存起来,新建一个空的可变的数据就够。
        通过成员操作符 in 判断每个字符是否在新数据结构中,
        如果不存在,则通过 .append 添加到新的数据结构中。
        如果存在,则记录长度,并清空数据结构。
        注意: 要开始下次判断前,注意开始的位置,应当从当前的字符开始。
"""
# 考虑的问题:输入全部为一个字符,字符串中间有空格,不输入……
string = input("输入字符串:")
# 替换空格为空
string = string.replace(" ", "")
# 新的列表存放无重复子串
string_1 = []
# 最长子串的长度
max_length = 0


# 自定义函数,求无重复子串的长度
def get_str_1_length(li):
    # 声明 max_length 是全局变量,(关键字:global)
    global max_length
    # 子串的长度
    string_1_length = len(li)
    # 目前无重复子串的长度是否为已知无重复子串的最大值
    if string_1_length > max_length:
        max_length = string_1_length


# 遍历字符串
for element in string:
    # choice 成员操作符判断的结果,True(1) or False(0)
    choice = element in string_1
    # print(choice, type(choice))
    # 结果为 False
    if choice == 0:
        # 追加元素到 string_1
        string_1.append(element)
        # 元素遍历到,字符串的最后一个字符,依旧无重复,则获取无重复子串的长度
        if element == string[-1]:
            # 调用子串长度获取函数
            get_str_1_length(string_1)
    # 判断结果为 True
    elif choice == 1:
        # 调用子串长度获取函数
        get_str_1_length(string_1)
        # 清空子串重新计数
        string_1.clear()
        # 从当前重复字符,开始判断
        string_1.append(element)
print(f"{string} 的无重复最长子串的长度是:{max_length}")

字典

字典的操作:

# 1. 字典的创建dict
# key-value对或者键值对
d = {"name":"westos", "age":18, "city":"西安"}
print(d, type(d))
d = {}
print(d, type(d))

# 2. 字典的特性
# 不支持+,*, index, slice(因为集合无序不重复的)
# 支持in和not in
d = {"name":"westos", "age":18, "city":"西安"}
print('name' in d)  # True, 判断是否为所有key值得成员
print("westos" in d) # False

# 3. 字典的常用方法
# 3-1). 查看
"""
查看所有: keys, values, items
查看局部: d[key], d.get(key), d.get(key, default-value)
"""
d = {"name":"westos", "age":18, "city":"西安"}
print(d.keys())  # 查看字典所有的key值
print(d.values())  # 查看字典所有的value值
print(d.items()) # 查看字典所有的key-value值(item元素)
print(d['name'])   # 查看key为name对应的value值
# print(d['province'])   # 查看key对应的vlaue值,如果不存在会报错。
print(d.get('province'))  # 查看key对应的vlaue值, 如果存在则返回,如果不在在则返回None.
print(d.get('province', "陕西"))  # 查看key对应的vlaue值, 如果存在则返回,如果不在在则返回默认值.

# 3-2). 增加和修改
d = {"name":"westos", "age":18}
d['city'] = "西安"   # key不存在就添加
print(d)
d['city'] = "北京"   # key存在则修改value值
print(d)

d = {"name":"westos", "age":18}
d.setdefault('city', "西安")  # key不存在就添加
print(d)
d.setdefault('city', "北京") # key存在,则do nothing
print(d)

# 3-3). 删除
d = {"name":"westos", "age":18}
d.pop('name')
print(d)
d = {"name":"westos", "age":18}
del d['name']
print(d)


# 4. 遍历字典(for)
d = {"name":"westos", "age":18, "city":"西安"}
# 默认情况下,字典只会遍历key值
for item in d:
    print(item)

# 如果遍历字典的key和value呢?(特别特别重要)
for key,value in d.items():  # [('name', 'westos'), ('age', 18), ('city', '西安')]
    print(f"key={key}, value={value}")



字典的拓展 defaultdictionary:

from collections import  defaultdict

# 默认字典,设置默认value
d = defaultdict(int)
d['views'] += 1
d['transfer'] += 1
print(d)

d = defaultdict(list)
d['allow_users'].append('westos')
d['deny_users'].extend(['user1', 'user2'])
print(d)

d = defaultdict(set)
d['love_movies'].add("黑客帝国")
d['dislike_movies'].update({'前任3', '电影xxxx'})
print(d)


 

 

 

 

 

 


本文链接: http://www.dtmao.cc/news_show_700475.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?