首页 > 其他分享 >散列类型(1)

散列类型(1)

时间:2024-11-07 10:16:51浏览次数:3  
标签:name 18 age print key 类型 散列 字典

八 散列类型与字符串格式化

8.1 散列类型(哈希类型)

8个基本数据类型
int float bool str list tuple set dict

- 按照数据结构划分
	数值类型	int float bool	单个数值
    序列类型	str list tuple	存储多个数据  (有序)  有序意味着存在下标
    散列类型	set dict		存储多个数据  (无序)  	

散列类型特征

  1. 无序, 意味着 序列那一套规则 不适用
  2. 去重的,散列类型数据无法重复

8.1.1 集合(set)

8.1.1.1 概念

集合(set) -》 负责存储【不重复的数据】,并且是【无序存储】的容器,主要是用于来 去重或者逻辑比较的容器

生活中什么东西如果重复了,就违背它的意义了

  • 身份证号
  • 电话号码
  • 二维码
  • 指纹
  • 学号
8.1.1.2 性质

唯一性:元素唯一存在的,不能重复

可变性:集合和列表一样是可变的,可以增可以删

无序性:没有特定的方法去访问指定位置的元素

# 如何创建一个集合?
# {数据1,数据2,数据3,....}
set1 = {1,2,3,4,3,2,1,5,6,7,7,7,9,8,0}
print(set1) # 里面的数据 默认去重  唯一性
set1 = {1,2,3,4,3,2,1,5,6,7,7,7,9,8,0}
print(set1) # 里面的数据 默认去重


# print(set1[0]) # 散列类型都没有下标,无法直接提取。报错
print(type(set1))



# 注意:创建空集合的时候,必须使用set()表示一个空集合,而不能直接{}
空列表 []
空元组 ()
	元组单个元素的时候,不能直接 (1)
    单个元组 (1,)
空字符串 ""
空集合 set()
空字典 {}



# 集合也支持使用推导式
# 列表推导式
arr = ["6" for i in range(1,11)]
# 集合也支持推导式
set1 = {i for i in range(1,11)}
print(set1)


# li = [1,2,3,4,6,6,6,6,6,6,6,7,7,8]

# 专门利用集合来帮助去重,经常需要利用集合的性质来去重
li = set(li)
li = list(li)
print(li)

# 一行写完
li = list(set(li))
print(li)
8.1.1.3 运算
运算操作Python运算符含义
交集&取两集合公共的元素
并集|取两集合全部的元素
差集-取一个集合中另一集合没有的元素
成员运算in 和 not in判断一个某个元素是否在或者不在集合中
集合1 & 集合2  --> 判断交集		shift + 7 => &
集合1 | 集合2  --> 判断并集     shift + \ => |
集合1 - 集合2  --> 判断差集		-



y = ["apple", "banana", "cherry"]
t = ["banana", "cherry",'orange']

# 统计以下,连续两年卖的最好的水果

print(set(y) & set(t))
8.1.1.4 方法
    • add() : 参数为要添加的数据, 随机添加到集合中,位置不确定

      s = {'python'}
      
      print(s)
      s.add("java")
      print(s)
      s.add('c++')
      print(s)
      
    • update() : 参数为序列类型,可以一次性加入多个,拆开后随机加

      s = {'python'}
      s.update(['java','c++','js'])
      print(s)
      
    • pop() : 默认删除第一个 python3.6之前 随机删

      
      
      s = {'python'}
      
      
      s.update(['java','c++','js'])
      print(s)
      
      
      s.pop()
      print(s)
      s.pop()
      print(s)
      
      
    • remove(): 有参数,参数为要删除的元素,如果元素不存在会报错

      
      
      s = {'python'}
      
      
      s.update(['java','c++','js'])
      print(s)
      
      s.remove('python') # 指定删除python
      print(s)
      
      
    • clear() : 清空集合

      s = {'python'}
      s.update(['java','c++','js'])
      print(s)
      s.clear()
      print(s)
      

8.1.2 字典(dict)

8.1.2.1 概念

之前的容器:list、tuple、set,都是存储一个普通元素

字典用来保存的是 “对应关系” 的 数据类型,特点是用键值对的方式来存储数据

dic = {'彬彬': 10000, '翠果': 6666}
# 语法格式
	字典名 = {键名1:值,键名2:值,键名3:值}
  • 什么是字典?

    - 由一系列 键值对 组成的 映射 容器
    - 映射:一对一的对应关系。  一个key 对应 一个value
    - 字典的键必须唯一且不可变
    
    # 散列类型
    # 访问方式:字典[key]
    
    
    # person = ['小红',18,'女']
    # person2 = ['小白','男',19]
    
    
    person = {
        'name':'小红',
        'age':18,
        'sex':'女'
    }
    print(person['name'])
    print(person['age'])
    print(person['sex'])
    person2 = { # 字典: 查询
        'name':'小红',
        'sex':'女',
        'age':18,
    }
    print(person2['name'])
    print(person2['age'])
    print(person2['sex'])
    

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

person1 = {"姓名":'王立宏','年龄':18,'分数':99,'性别':'男'}
person2 = {"姓名":'周杰沦','年龄':18,'分数':99,'性别':'男'}
person3 = {"姓名":'蔡徐昆','年龄':18,'分数':99,'性别':'男'}
person4 = {"姓名":'林俊捷','年龄':18,'分数':99,'性别':'男'}

data = [person1,person2,person3,person4] # 列表套字典

for i in data:
    print(i['姓名'],i['分数'])
    
    

# 字典套字典 
data = {
    1:{"姓名":'王立宏','年龄':18,'分数':99,'性别':'男'},
    2:{"姓名":'周杰沦','年龄':18,'分数':99,'性别':'男'},
    3:{"姓名":'蔡徐昆','年龄':18,'分数':99,'性别':'男'},
    4:{"姓名":'林俊捷','年龄':18,'分数':99,'性别':'男'}
}

# 字典套娃


heroes = { 
    "孙尚香": { 
        "role": "射手", 
        "attack": 220, 
        "health": 3000, 
        "level": 18, 
        "equipment": [] 
    }, 
    "张飞": { 
        "role": "坦克", 
        "attack": 150, 
        "health": 4000, 
        "level": 15, 
        "equipment": [] 
    }
}

equipment = {
    "破军": {"attack": 40, "health": 0},
    "影刃": {"attack": 30, "health": 200},
    "不死鸟之眼": {"attack": 0, "health": 300},
    "无尽战刃": {"attack": 60, "health": 0},
    "名刀·司命": {"attack": 20, "health": 150},
    "抵抗之靴": {"attack": 0, "health": 250},
    "狂暴之斧": {"attack": 45, "health": 100},
    "隐忍之足": {"attack": 0, "health": 200},
    "魔女斗篷": {"attack": 0, "health": 400},
}



8.1.2.2 性质
  1. 无序 :没有下标,全靠key来查询

    访问方式: 字典[key]
    
  2. 不重复:key无法重复

    heroes = {'a':1,'b':2,'a':3}
    # 字典的键是无法存在相同的,具有相同的key的时候,默认取最新的键值对
    print(heroes)
    print(heroes['a'])
    
  3. 可变性:字典里面的数据是可改

    d = {'a':1,'b':2,'c':3}
    d['a'] = 10 # 可以直接通过key访问修改
    print(d)
    
8.1.2.3 方法
  • # 一般新增加 键值对,直接访问赋值
    
    d = {'a':1,'b':2,'c':3}
    print(d)
    # 添加一个 "e":5
    d['e'] = 5 # 如果该key本身不存在,赋值的话,直接添加到字典里面
    print('e')
    print(d)
    
    
    # 也有方法。但是用的少
    d = {'a':1,'b':2,'c':3}
    print(d)
    d.setdefault("e",5) # 第1个参数为key,第2个参数为value
    print(d)
    
    • pop(key) : 删除某键值对

      列表中 pop 是通过 下标 删除
      字典中 pop 是通过 key 删除 键值对
      
      集合中 pop 删除首个
      d = {'a':1,'b':2,'c':3}
      print(d)
      d.setdefault("e",5) # 第1个参数为key,第2个参数为value
      print(d)
      d.pop('a') # 删掉key为'a'的键值对
      print(d)
      
    • clear() : 清空字典

      
      d.clear()
      print(d) # {}   
      
  • - 推荐直接赋值
    d = {'a':1,'b':2,'c':3}
    d['c'] = 10 # 如果有,那就是修改
    d['f'] = 100 # 如果没有,那就新增
    
    
    - 也有方法
    # 可以批量修改(包括了新增)
    d.update({'f':200,'z':'666'})
    
    print(d)
    
    • 查value
    # 查value
    	字典[key] # 查询
    # 通过方法查value
    	字典.get(key,defult=None) # 查询,区别是如果没找到key,则返回defult
    
    • 字典.keys() : 获得所有的键,返回一个 伪列表类型

      d = {'a':1,'b':2,'c':3,'d':4}
      # 遍历字典 (键值对)
      # d.keys() 以列表的形式,返回所有的key
      arr = list(d.keys())
      for key in arr:
          print(key,d[key])
      
      
    • 字典.values() : 获得所有的值 ,返回一个 列表类型

      d = {'a':1,'b':2,'c':3,'d':4}
      print(d.values()) # 1,2,3,4
      

8.2 字符串格式化

name = '彬彬'
age = 18

# 将变量放到一个字符串中
# 方法一:利用字符串的拼接
print('大家好,我是' + name + ' 我今年' + str(age) + '岁')
# 方法二:利用print多个值输出
print('大家好,我是',name,' 我今年',age,'岁' ,sep="")



# 能不能直接让 字符串中识别变量?
print('大家好,我是name,我今年age岁')

8.2.1 %(占位符)

常用的占位符

%s  字符串--》 占了一个位置,后续存储字符串
%d  整数 --》 占了一个位置,只能放整数
%f  小数 --》 占了一个位置,只能放小数,默认保留6位小数点
	%.2f # 保留2位小数点
    %.3f # 保留3位小数点
    %.xf # 保留x位小数点

使用语法
"xxxx%dxxxx%s"%(数据1,数据2)

name = '彬彬'
age = 18
height = 1.81

s = '大家好,我是%s,我今年%d岁,身高%f'
print(s%(name,age,height)) # 后续再决定值是什么
print(s%('翠果',19.6,1.888888)) # 后续再决定值是什么

8.2.2 format()方法

使用一对 {} 来占用位置,后续通过字符串.format()方法填参 

name = '彬彬'
age = 18
height = 1.81
s = '大家好,我是{},我今年{}岁,身高{}'.format(name,age,height)
print(s)

8.2.3 f-format() 方法

python3.x 提供的

语法: 在字符串的前面 加上f/F, 直接可以在字符串中 写变量放到{}里面
    
name = '彬彬'
age = 18
height = 1.81
s = f'大家好,我是{name},我今年{age}岁,身高{height}'
print(s)

标签:name,18,age,print,key,类型,散列,字典
From: https://blog.csdn.net/2301_80202670/article/details/143507155

相关文章

  • ts-类型
    TypeScript由微软开发,是基于JavaScript的⼀个扩展语⾔。TypeScript包含了JavaScript的所有内容,即:TypeScript是JavaScript的超集。TypeScript增加了:静态类型检查、接⼝、泛型等很多现代开发特性,更适合⼤型项⽬的开发。TypeScript需要编译为JavaScript,然......
  • 界面控件Telerik UI for ASP.NET AJAX 2024 Q3亮点 - 新增金字塔图表类型
    TelerikUIforASP.NETAJAX拥有构建ASP.NETAJAX和SharePoint应用程序的80+控件,将为任何浏览器和设备构建WebForms应用程序的时间缩短一半。TelerikUIforASP.NETAJAX是完整的ASP.NETAJAX用户界面开发工具集,拥有超过80多种优化的ASP.NETAJAXUI控件,提供无与伦比的开发性......
  • RabbitMQ交换机类型
    RabbitMQ交换机类型1、RabbitMQ工作模型2、RabbitMQ交换机类型2.1、FanoutExchange(扇形)2.1.1、介绍2.1.2、示例2.1.2.1、生产者2.1.2.2、消费者2.1.2.3、测试2.2、DirectExchange(直连)2.2.1、介绍2.2.2、示例2.2.2.1、生产者2.2.2.2、测试2.3、TopicExchange(主题交......
  • Object.assign(), 一道关于基本类型合并的面试题
    vars1="abc";vars2=true;vars3=10;vars4=Symbol("foo")varobj=Object.assign(s1,null,s2,undefined,s3,s4);console.log(obj);//{"0":"a","1":"b","2":"c&quo......
  • 1.python的基本语法和简单数据类型
    1.1语法特点1.1.1注释语句单行注释在所需注释内容前加'#'号#我是一个注释多行注释'''(单引号/或双引号)注释代码''''''我是代码我是代码我是代码我是代码'''1.2.1缩进先看代码if<我是条件1>:<我是代码><我是代码>else:<我是......
  • 【JAVA】Java基础—基础语法:数据类型(基本数据类型与引用数据类型)
    在Java编程中,数据类型是一个非常重要的概念,它决定了变量能够存储什么样的数据以及如何在内存中处理这些数据。Java是一种强类型语言,这意味着每个变量都必须声明其数据类型,并且在使用时必须遵循该类型的规则。数据类型主要分为两大类:基本数据类型和引用数据类型。理解这两种数......
  • 第一章 TypeScript 基础数据类型详解
    在TypeScript中,正确理解和使用各种数据类型是构建强大、类型安全的应用程序的关键。让我们深入了解TypeScript中的一些主要数据类型。一、变量声明使用`let`关键字可以定义变量。例如:leta:number=100;console.log(a);这里明确指定变量`a`的类型为`number`......
  • 数据类型转换和Ascii表常用的几个数值
    1.数据类型转换:当数据类型不一致时,会发生数据类型转换(1)自动类型转换(隐式):数据范围从较小到较大时,代码不需做特殊处理,自动完成(2)强制类型转换(显式):数据范围从较大到较小时,代码需要特殊处理处理格式:范围小的类型范围小的变量名=(范围较小的类型)范围较大的数据;注意:<1>.强制类......
  • Spring-Converter类型转换器
    Converter在Spring3中引入了一个Converter接口,它支持从一个Object转为另一个Object。除了Converter接口之外,实现ConverterFactory接口和GenericConverter接口也可以实现我们自己的类型转换逻辑。Converter接口Converter<S,T>接口定义了从类型S转换为类型T的转换器。packa......
  • 什么是C++模板,有哪些类型的模板?
    模板C++模板是一种强大的语言特性,允许开发者编写与类型无关的代码,从而实现代码的复用和灵活性。通过模板,可以定义函数和类,具体实现将由具体的类型实例化决定。函数模板函数模板(FunctionTemplates):函数模板用于定义一个通用的函数,该函数可以接受任意类型的参数。通过使用模......