python基础之数据类型操作补充,集合及其操作,深浅拷贝
内容概要: 数据类型操作补充 集合及其操作 深浅拷贝
1.基础数据类型补充
1.1字符串的操作补充
li = ["李嘉诚", "麻花藤", "黄海峰", "刘嘉玲"]
s = "_".join(li) # 添加后列表变成字符串
print(type(s),s) li = "黄花大闺女"
s = "_".join(li) # 仍然是字符串
print(type(s),s) 1.2列表的循环删除(for循环) 不能用for循环要删除的列表(tips:字典在循环过程中不允许增加和删除,可以对内容修改),因为删除元素会引起索引号位置发生变化,导致报错或者删除不完全
常用删除的方法有 1.创建另外一个新列表,并将要删除的值赋予新列表,循环新列表来删除对应旧列表的信息
new_lis = []
lis = ["李嘉诚", "麻花藤", "黄海峰", "刘嘉玲"]
for i in lis:
if i.startswith("刘"):
new_lis.append(i)
for el in new_lis:
lis.remove(el)
print(lis) 2.也可用.pop来删除,但较麻烦不推荐
lis = ["李嘉诚", "麻花藤", "黄海峰", "刘嘉玲"]
for i in lis: # 这样不行
lis.pop()
print(lis) for i in range (0,len(lis)): #这样才可以,计算lis长度,利用计数弹出
lis.pop()
print(lis) 3.fromkeys 主要形式:dict.fromkeys(iter, value),把可迭代对象进行迭代。和后面的value组合成键值对,返回新字典
实例
dic = dict.fromkeys(["李嘉诚", "麻花藤"],["黄海峰"])
print(dic) 3.1 几个大坑
坑一
dic = {}
dic1 = dic.fromkeys(["李嘉诚", "麻花藤"],["黄海峰"])
print(dic) #输出是个空字符{},因为 fromkeys 是创建一个新列表,如果dic原本就存在,则此过程会忽略 坑二
dic1 = dict.fromkeys(["李嘉诚", "麻花藤"],["黄海峰"])
dic1["李嘉诚"].append("黄花菜")
print(dic1) # 输出 {'李嘉诚': ['黄海峰', '黄花菜'], '麻花藤': ['黄海峰', '黄花菜']} 因为指向同一个列表 set 集合 特点:1.set内的元素是不可以改变,可HASH的 2.不可重复,无序 1.1 set内的元素是不可以改变,可HASH的
set1 = {'1','alex',2,True,[1,2,3]} # 报错
set2 = {'1','alex',2,True,{1:2}} # 报错
set3 = {'1','alex',2,True,(1,2,[2,3,4])} # 报错 1.2 不可重复,无序(很重要,可以用来去除重复项)
s = {"周杰伦", "周杰伦", "周星星"}
print(list(set(s))) # 结果:{'周星星', '周杰伦'} 2.集合的操作
2.1增
s = {"周杰伦", "彭于晏", "周星星"}
s.add("尼古拉斯赵四")
print(s) s = {"刘嘉玲", '关之琳', "王祖贤"}
s.update("麻花藤") # 迭代更更新
print(s)
s.update(["张曼玉", "李若彤","李若彤"])
print(s) 2.2 删
s = {"周杰伦", "彭于晏", "周星星"}
s.clear()
s.remove("彭于晏")
item = s.pop() #随机弹出一个,每次运行结果都不一样。
print(item)
print(s) 2.3.改
# 集合因为没有索引,是无序的,不能直接修改,可采用先删除后添加的方式
s = {"周杰伦", "彭于晏", "周星星"}
s.remove("彭于晏")
s.add("尼古拉斯赵四")
print(s) 2.4 查 set是可迭代对象,可用For循环便利查询
for el in set:
print(set) 2.5 其他操作
s1 = {"刘能", "赵四", "皮长山"}
s2 = {"刘科长", "冯乡长", "皮长山"} print(s1 & s2) # 交集
print(s1 | s2) # 并集
print(s1 - s2) # 差集,得到第一个中单独存在的
print(s2 - s1) # 差集,得到第二个中单独存在的
print(s1 ^ s2) # 反并集,并集减去交集 s1 = {"刘能", "赵四"}
s2 = {"刘能", "赵四", "⽪皮⻓长⼭山"}
print(s1 > s2) # 超集,判断s1是否为s2的超集
print(s1 < s2) # 子集,判断s1是否为s2的子集 3.深浅拷贝 3.1 赋值
dic1 = {"id": 123, "name": "谢逊"}
dic2 = dic1
print(dic1)
print(dic2) dic1['name'] = "范瑶"
print(dic1)
print(dic2) 结果:
{'id': 123, 'name': '谢逊'}
{'id': 123, 'name': '谢逊'}
{'id': 123, 'name': '范瑶'}
{'id': 123, 'name': '范瑶'}
总结:直接赋值. 其实是把内存地址交给变量量. 并不是复制⼀份内容. 所以.lst1的内存指向和lst2是⼀一样的. lst1改变了了, lst2也发⽣生了了改变 3.2 浅拷贝 只会拷贝第一层. 第⼆层的内容不会拷贝. 所以被称为浅拷⻉
lst1 = ["何炅", "杜海涛","周渝民", ["麻花藤", "马芸", "周笔畅"]]
lst2 = lst1.copy()
lst1.append("刘德华")
print(lst1)
print(lst2)
print(id(lst1), id(lst2)) # 改变lst第一层的元素,发现拷贝的列表不会改变,并且第一层的内存id也完全不一样
lst1[3].append("无敌是多么寂寞")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3])) # 改变lst第2层的元素,发现拷贝的列表第二层一起改变,并且第2层的内存id也完全一样 3.3 深度拷贝. 把元素内部的元素完全进行拷贝复制. 不会产生一个改变另一个跟着改变的问题
import copy # 引进拷贝
lst1 = ["何炅", "杜海涛","周渝民", ["麻花藤", "马芸", "周笔畅"]]
lst2 = copy.deepcopy(lst1) # copy.deepcopy() 深度拷贝的表达形式
lst1.append("刘德华")
print(lst1)
print(lst2)
print(id(lst1), id(lst2)) # 改变lst第一层的元素,发现拷贝的列表不会改变,并且第一层的内存id也完全不一样
lst1[3].append("无敌是多么寂寞")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3])) # 改变lst第2层的元素,发现拷贝的列表第二层也不会一起改变,并且第2层的内存id也完全不一样
python基础之数据类型操作补充,集合及其操作,深浅拷贝的更多相关文章
- Python全栈之路3--set集合--三元运算--深浅拷贝--初识函数
一.上节课的重点回顾: 1.类名加括号其实就是执行类的__init__方法: 2.int a.创建方式 n1 = 123 #根据int类创建了一个对象 n2 = int(123) #根据int类创建一 ...
- python基础之 数据类型的补充,小数据类型
1.id is详解 ID 在Python中,id是什么?id是内存地址,比如你利用id()内置函数去查询一个数据的内存地址: name = 'nba' print(id(name)) # 158583 ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- 第二章:python基础,数据类型
"""第二章:python基础,数据类型2.1 变量及身份运算补充2.2 二进制数2.3 字符编码每8位所占的空间位一个比特,这是计算机中最小的表示单位.每8个比特组成一 ...
- Python基础之数据类型
Python基础之数据类型 变量赋值 Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值 ...
- python基础一数据类型之字典
摘要: python基础一数据类型之一字典,这篇主要讲字典. 1,定义字典 2,字典的基础知识 3,字典的方法 1,定义字典 1,定义1个空字典 dict1 = {} 2,定义字典 dict1 = d ...
- python基础之字典dict和集合set
作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7043642.html python基础之字典dict和集合set 字典dic ...
- 第八天- 基础数据操作补充 集合set 深浅拷贝
字符串的操作补充: .join() 方法用于将序列(字符串/列表/元组/字典)中的 元素 以指定的字符连接生成一个新的字符串 str = "人生苦短我用python!" # 用于字 ...
- python基础一数据类型之集合
摘要: python基础一中介绍数据类型的时候有集合,所以这篇主要讲集合. 1,集合的定义 2,集合的功能 3,集合的方法 1,集合的定义 list1 = [1,4,5,7,3,6,7,9] set1 ...
随机推荐
- luogu P2486 [SDOI2011]染色
树剖做法: 就是两个dfs+一个线段树 难度的取决基本==线段树的维护难度 所以对有点线段树基础的,树剖也不难做吧 这里操作有二 一:两点间路径染色 线段树的区间赋值操作 二:查询路径段的个数 考虑线 ...
- Docker部署微服务
部署时需要注!意!: 打开防火墙对应的应用端口!!用于外部访问!!内部互访问则不需要. 和对应数据库,缓存,消息中间件服务等的端口(当然这些服务必须先开启,它们也可使用docker部署开启) ,用于容 ...
- Spring核心简介
Spring简介 Spring是一个开源.轻量级框架.在诞生之初,创建Spring的主要目的是用来替代更加重量级的企业级Java技术,尤其是EJB(Enterprise JavaBean).从最初的挑 ...
- Unity3D学习笔记(三十五):Shader着色器(2)- 顶点片元着色器
Alpha测试 AlphaTest Great:大于 AlphaTest Less:小于 AlphaTest Equal:等于 AlphaTest GEqual:大于等于 AlphaTest LEqu ...
- Java二进制指令
转自: http://www.blogjava.net/DLevin/archive/2011/09/13/358497.html 指令从0x00-0xc9 没有0xba 常量入栈指令 指令码 操作码 ...
- Redis-Sentinel
Redis-Sentinel是Redis官方推荐的高可用性(HA) 解决方案,Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能 ...
- tcpdump使用方法
TcpDump可以将网络中传送的数据包完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉无用的信息. 工作中使用tcpdump命令抓 ...
- js点击显示隐藏
这个栗子…… 可以不吃,先预设一个变量表示div的状态,例子中0是显示的,一开始是隐藏的.当点击时判断状态是显示0的还是隐藏1的:如果是显示的就把div隐藏,再把变量改变为1.再次点击时把会判断到变量 ...
- 51nod 1366 贫富差距(flody)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1366 题意: 思路: 如果不是一个连通块的话,肯定是无穷大的. 用flo ...
- 【Python】【jupyter-notebook】
1. win7 安装:https://www.cnblogs.com/zlslch/p/6984403.html 1.Jupyter Notebook 和 pip 为了更加方便地写 Python ...