【python基础】——数据类型(列表、字典、集合)

骏马金龙——python语法基础

python基础

变量与运算

符号//%**
意义整除整除取余幂次方

数据种类

数据类型
序列-元素具有有序性
非序列-元素无序性
字符串str
元组tuple
列表list
集合set
字典dict
元素不可变
元素不可变
元素可变
元素可变
元素可变

0. 序列

参考:python序列操作

序列(str、list、tuple)可以进行的操作:
通过索引取元素、切片操作、找出第一个元素的位置index()

可变序列(list)可以进行的操作:
**1) 删除相关操作有del、remove()、pop()、clear()。
2)添加相关操作有append()、extend()、insert()、s *= n
3)拷贝序列copy()、反转序列reverse()。
4) 注意:列表复制有三种

l0 = [1, 2, 3]
print("l0_:",l0)
l1 = l0
l2 = l0[:]
l4 = l0*4
print("l4_:",l4)
l3 = l0.copy()
l0.append(1000)
l1.append(0)
print("l0:",l0)
print("l1:",l1)
print("l2:",l2)
print("l3:",l3)
print("l4:",l4)

l0_: [1, 2, 3]
l4_: [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
l0: [1, 2, 3, 1000, 0]
l1: [1, 2, 3, 1000, 0]
l2: [1, 2, 3]
l3: [1, 2, 3]
l4: [[1, 2, 3, 1000, 0], [1, 2, 3, 1000, 0], [1, 2, 3, 1000, 0], [1, 2, 3, 1000, 0]]
可见:因为可变序列引用的是地址,直接通过赋值的方式进行复制,只是将地址复制了,没有真正地重新分配另一块新的地址进行存放,所有当l0和l1任何一方进行改变的时候,都会导致地址的内容发生改变,因此l0和l1会发生改变,而l2,l3是通过copy等方式进行的深层复制,直接分配了一个新的地址进行存储,因此不会随l0改变而改变
l4是对列表进行复制,这样引用的是地址吗,导致后面也会出现随动现象

不可变序列(tuple、str)可以进行的操作:
**hash(哈希映射操作):就是根据一定的规则将不可变的序列映射成另一个形式,可以简单地理解为y = f(x)的形式,最常见的是将不可变序列hash成十进制的数字,一般映射关系是一一对应的

>>> hash("asd")
-2014632507>>> hash((1,23))
1320437575>>> hash([1,23])
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

能够hash的不可变序列,意味着能作为dict的key,能保存到set或frozenset中


1. 列表

# ----------------------列表的创建------------------
l1 = list()
l2 = []
print("l1:",l1)
print("l2:",l2)

1). 添加元素:append()、extend()、insert()

append()、extend()——前者是将整个添加的对象作为一个整体添加而后者则是将可迭代对象的内层每一个元素单个添加

# ----------------------列表元素的添加---------------------
## 直接在列表最后面进行元素的添加,append,extend
for i in range(10):l1.append(i)l2.append(i+2)
print("l1:",l1)
print("l2:",l2)
l1.extend(l2)
print(l1)## 根据索引将元素插入到指定的位置,列表自动延长,该位置及以后的原来元素向后挪位置
l1 = [1,2,3]
print("插入前:",l1)
l1.insert(1,["插入的元素"])
print("插入后:",l1)

2). 删除元素:remove()、pop()、del

# -----------------删除元素------------#
# 直接在列表末尾删除元素,
popl1 = [1,2,3]
l1.pop()
print(l1)
## 直接移除指定的元素,remove,若要移除的元素不存在报错
l1 = [1,2,3
l1.remove(2)
print(l1)
del l1[1]

3). 其他操作:reverse()、index()、count()等

# ----------------其他-----------------
## 合并
print(l1 + l2)
## 查找第一个元素的索引
print(l1.index(1))
## 反转
print(l1.reverse())
## 计数
print(l1.count(1))

注意:


2、字典——{key:value}形式的非序列容器无序数据结构

字典是无序的,和集合一样,根据索引得到的元素和添加元素的顺序是没有关系的
字典的内部结构> 如上图所示,字典是一个通过键值对进行元素的存放的一个数据结构,key代表元素的唯一标签。对于字典的操作都是先对key进行hash,然后根据hash值(可以理解为地址)去得到key和value的指针,如:
1)存放字典元素:根据key得到hash值,若hash值对应的指向value的指针不存在,则新创建key-value键值对,若存在,则将value值覆盖为最新的值

1)创建字典

dict1 = {"1":"1","2":2,"3":3}
dict2 = dict(one=1,two=2,three=3)
dict3 = dict([('one',1),("two",2)])
dict4 = dict(zip(("one","two","three"),(1,2,3)))

{‘1’: ‘1’, ‘2’: 2, ‘3’: 3}
{‘one’: 1, ‘two’: 2, ‘three’: 3}
{‘one’: 1, ‘two’: 2}
{‘one’: 1, ‘two’: 2, ‘three’: 3}

在python中,能hashable的数据类型都必须是不可变类型的,所以列表、集合、字典不能作为dict的key,字符串、数值、元组都可以作为dict的key(类的对象实例也可以,因为自定义类的对象默认是不可变的)。

2)初始化字典

dict.fromkeys(序列,默认的字典值)

dict5 = dict.fromkeys("abcd,",2)

3)字典的拷贝

# ------------字典的拷贝--------------------
dict6 = dict1.copy() # 浅拷贝,只是将每一个key的地址给到了新字典
print(dict1)
print(dict6)
print(id(dict1["1"]))
print(id(dict6["1"]))dict6["1"] = 4 # 但是在一个拷贝的字典中发生值的改变值,会为这个键新开辟一个地址用于存储新的值
print(dict1)
print(dict6)
print(id(dict1["1"]))
print(id(dict6["1"]))
print(id(dict1["2"]))
print(id(dict6["2"]))

{‘1’: ‘1’, ‘2’: 2, ‘3’: 3}
{‘1’: ‘1’, ‘2’: 2, ‘3’: 3}
1508279661712
1508279661712
{‘1’: ‘1’, ‘2’: 2, ‘3’: 3}
{‘1’: 4, ‘2’: 2, ‘3’: 3}
1508279661712
140712196691072
140712196691008
140712196691008

4)增删改查

# --------------------字典的增删改查-------------------------
## 查询,根据key查找,不存在时会报错,可以通过重写字典类的__missing__方法来实现返回None
dict7 = {"1":"1","2":2,"3":3}
value = dict7["1"]
## 更新
dict7.update({"1":2,"4":5})
dict7["5"] = 6
## pop类
print(dict7.pop("1"))
print(dict7.popitem()) #按照 LIFO(Last In First Out 后进先出法
## 删除
dict7.update({"1":2,"4":5})
dict7["5"] = 6
del dict7["5"]
dict7.clear()

5)获得key,value和键值对

#--------------------获得字典key,value,键值对,若想对其进行迭代取值,需要利用list进行解析dict8 = {"1":"1","2":2,"3":3}
print(dict8.keys())
print(list(dict8.keys()))
print(dict8.values())
print(dict8.items())
print(iter(dict8))

dict_keys([‘1’, ‘2’, ‘3’])
[‘1’, ‘2’, ‘3’]
dict_values([‘1’, 2, 3])
dict_items([(‘1’, ‘1’), (‘2’, 2), (‘3’, 3)])
<dict_keyiterator object at 0x0000015F2C7BD908>

3、集合set——无value版本的字典

无序、元素不重复、元素可变

1)创建

#创建
set1 = set()
set2 = {1,2,3}

2)集合运算

# 集合运算
set3 = {1,2,3}
set4 = {3,4,5,6}
## 交集
interset = set3&set4
interset2 = set3.intersection(set4)
print(interset)
print(interset2)
## 并集
union1  =set3|set4
union2 = set3.union(set4)
print(union1)
print(union2)
## 差集
diff1 = set3-set4
diff2 = set3.difference(set4)
print(diff1)
print(diff2)
diff3 = set4-set3
diff4 = set4.difference(set3)
print(diff3)
print(diff4)
## XOR集合,非相交部分
xor1 = set3^set4
xor2 = set3.symmetric_difference(set4)
print(xor1)
print(xor2)

{3}
{3}
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6}
{1, 2}
{1, 2}
{4, 5, 6}
{4, 5, 6}
{1, 2, 4, 5, 6}
{1, 2, 4, 5, 6}

3)其他操作

set5 = {1,2,3,4,5}
print(set5)
set5.add(6)
print(set5)
set5.remove(6)
print(set5)
set5.pop()
print(set5)
set5.clear()
print(set5)

{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5}
{2, 3, 4, 5}
set()

数据类型总结

数据类型元素支持类型元素可变性元素有序性查找元素的方法
字符串字符不可变有序根据下标索引
列表所有数据类型可变有序根据下标索引
字典键(key):不可变数据类型(tuple、str、字符、数值类型等)、可hash的数据类型;值(value):所有数据类型即可可变无序根据键key查找
集合所有数据类型(元素不重复)可变无序/
元组所有数据类型不可变有序根据下标索引

参考文献

https://www.cnblogs.com/f-ck-need-u/p/9832640.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人实现屠宰自动化

当 WESTFLEISCH 注册合作社考虑在 Coesfeld 肉类加工中心内自动化原有的人工屠宰设备过程时&#xff0c;首先在“剔除直肠”及“切开盆腔骨及腹部”两个流程中测试使用了两台库卡机器人。在此过程中&#xff0c;机器人主要以它工作的质量及经济效益说服了使用者。 实施措施/解…

python数据结构《排序专题复习》

目录 常见的三种排序方法 冒泡排序 插入排序 选择排序 其他经典的排序方法 快速排序 堆排序 归并排序 希尔排序 不同排序方法的各维度对比 排序方式的稳定性&#xff1a;若两个相同的元素在排序前后的相对位置不发生改变的排序为稳定排序&#xff0c;否则不稳定排序 常…

BZOJ2844 albus就是要第一个出场

AC通道&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id2844 这题貌似HDU上有一道差不多的题&#xff0c;不过我没做过&#xff0c;也就没管了。 首先讲一个线性基的东西&#xff0c;大概就是这样&#xff1a; 然后就是一个什么性质&#xff1a;S异或起来会出现重…

HTG Explains: Why Linux Doesn’t Need Defragmenting

If you’re a Linux user, you’ve probably heard that you don’t need to defragment your Linux file systems. You’ll also notice that Linux distributions don’t come with disk-defragmenting utilities. But why is that? To understand why Linux file systems d…

Spring AOP 实战运用

Spring AOP 实战 看了上面这么多的理论知识, 不知道大家有没有觉得枯燥哈. 不过不要急, 俗话说理论是实践的基础, 对 Spring AOP 有了基本的理论认识后, 我们来看一下下面几个具体的例子吧.下面的几个例子是我在工作中所遇见的比较常用的 Spring AOP 的使用场景, 我精简了很多有…

大话设计模式之策略模式

第二章&#xff1a;商场促销——策略模式 策略模式的定义:策略模式是一种定义一系列算法的方法&#xff0c;从概念上来看&#xff0c;所有这些算法完成的都是相同的工作&#xff0c;知识实现不同&#xff0c;他可以以相同的方式调用所有的算法&#xff0c;减少了各类算法类与使…

【Python学习】——语言风格(变量赋值、深浅拷贝、for循环陷阱)

目录 1、赋值 2、赋值的分类——引用赋值、值赋值 1) 不可变对象引用赋值——字符串、数值、元组等 2&#xff09;可变对象引用赋值——列表、集合、字典 3&#xff09;可变与不可变对象的引用赋值内部分析 4&#xff09;在py文件中&#xff0c;和作用域有关&#xff0c;如…

判断庄家是否出货

1. 大盘处于强势的时候 日平均线在横盘的时候&#xff0c;缓慢拉升然后急剧下跌 高位盘整的时候 2. 有利好消息发布的时候 因为庄家会利用这个对于散户来说这个买入时机来进行出货操作&#xff0c;可见庄家真是阴险狡诈转载于:https://www.cnblogs.com/dcz1001/p/6115893.html

【深度学习】——常见深度学习模型总结、anchor-free和anchor-based

目录 1、faster rcnn&#xff1a; 2、SSD&#xff1a; 3、YOLOv1: 小结&#xff1a; 拓展&#xff1a;anchor-based和anchor-free anchor 1、faster rcnn&#xff1a; FasterRcnn 算法原理讲解笔记&#xff08;非常详细&#xff09;https://blog.csdn.net/xjtdw/article…

真静态和伪静态的区别

首先肯定的是纯静态和伪静态都是SEO的产物&#xff0c;但纯静态和伪静态还是有很大区别的。 纯静态是生成真实的HTML页面保存到服务器端&#xff0c;用户访问时直接访问这 个HTML页面即可&#xff0c;从而大大的减轻了服务器压力&#xff08;如dedecms就是采用的纯静态&#xf…

非常有趣的Console

console觉醒之路&#xff0c;打印个动画如何&#xff1f; 原文地址: http://www.helloweba.com/view-blog-383.html 批量去掉或替换文本中的换行符&#xff08;notepad、sublime text2&#xff09; 原文地址&#xff1a;http://m.blog.csdn.net/article/details?id43228729 有…

假期实践

第一天 地点:杭州颐高数码城 第一天&#xff0c;我来到了自己家附近的颐高数码城。文三路这边有一个卖数码产品的一条街&#xff0c;这里也是最贴近我专业实践的地方&#xff0c;所以第一天的实践我选择了这里。 2001年开业的颐高数码广场座落于“电子一条街”文三路、学院路口…

3.AngularJS-过滤器

转自&#xff1a;https://www.cnblogs.com/best/p/6225621.html 二、过滤器 使用过滤器格式化数据&#xff0c;变换数据格式&#xff0c;在模板中使用一个插值变量。语法格式如下&#xff1a; {{ express | filter:parameter1:p2:p3… | … | …}} 过滤器分了内置过滤器与自定义…

【深度学习】——训练过程

包含哪些层 训练过程 其实就是yf(x)的求参过程&#xff0c;先给参数一个初始值&#xff0c;然后根据初始函数计算得到预测值&#xff0c;根据预测值和真值计算损失&#xff0c;然后又根据损失函数进行反向传播更新参数&#xff0c;更新参数后&#xff0c;再次计算预测值&#…

thinkphp自定义模板标签(一)

thinkphp内置的foreach和include等模板标签使用是非常方便的&#xff1b;但是内置的那些标签只能满足常用功能&#xff0c;个性化的功能就需要我们自己编写自定义模板标签了&#xff1b;下面就是要讲解如何实现&#xff1b; 示例环境&#xff1a;thinkphp3.2.3 thinkphp的模板标…

【深度学习】——激活函数(sigmoid、tanh、relu、softmax)

目录 激活函数 1、作用 2、常用激活函数 3、衡量激活函数好坏的标准&#xff1a; 4、不同的激活函数 1&#xff09;sigmoid 2&#xff09;tanh函数 3&#xff09;RULE函数和leak-relu函数 4&#xff09;softmax函数 激活函数 1、作用 如果只是线性卷积的话&#xff0c…

【深度学习】——分类损失函数、回归损失函数、交叉熵损失函数、均方差损失函数、损失函数曲线、

目录 代码 回归问题的损失函数 分类问题的损失函数 1、 0-1损失 (zero-one loss) 2、Logistic loss 3、Hinge loss 4、指数损失(Exponential loss) 机器学习的损失函数 Cross Entropy Loss Function&#xff08;交叉熵损失函数&#xff09; 交叉熵优点 Mean Squared E…

【转】应用架构一团糟?如何将单体应用改造为微服务

概述 将单体应用改造为微服务实际上是应用现代化的过程&#xff0c;这是开发者们在过去十年来一直在做的事情&#xff0c;所以已经有一些可以复用的经验。 全部重写是绝对不能用的策略&#xff0c;除非你要集中精力从头构建一个基于微服务的应用。虽然听起来很有吸引力&#xf…

Linux 解决ssh连接慢的问题

备份文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak 编辑文件 vi /etc/ssh/sshd_config 输入/ 查找GSSAPIAuthentication 设置如下 GSSAPIAuthentication no # 是否允许使用基于 GSSAPI 的用户认证。默认值为"no"。仅用于SSH-2 详细解释 输入/ 查找UseDNS …

【Hibernate】Hibernate系列6之HQL查询

HQL查询 6.1、概述 6.2、分页查询 6.3、命名查询 6.4、投影查询-部分字段查询 6.5、报表查询 6.6、迫切左外连接、左外连接 6.7、迫切内连接、内连接 6.8、QBC查询、本地查询 转载于:https://www.cnblogs.com/junneyang/p/5254641.html