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 ...
随机推荐
- IDEA引入Gradle工程小记
1.首先IDEA要在该工程Settings中配置本地安装的Gradle,配好其home目录,注意目录到根目录即可,不要到bin一级,否则提示错误,无法使用: 2.配置好后会自动侦测Gradle项目,点 ...
- swagger 基础入门
目录 Swagger简介 4 安装 4 一. Node.js 安装 4 二. node中http-server安装 4 三. 下载swagger-editor 4 四. 启动 swagger-edit ...
- Win32汇编学习(1):基本概念
背景知识 Windows 把每一个 Win32 应用程序放到分开的虚拟地址空间中去运行,也就是说每一个应用程序都拥有其相互独立的 4GB 地址空间,当然这倒不是说它们都拥有 4GB 的物理地址空间,而 ...
- [CodeForces - 276A] Lunch Rush
题目链接:http://codeforces.com/problemset/problem/276/A 从这n个输入中求最大值,注意 和 k的比较,定义一个maxn,对每个输入进行计算即可. AC代码 ...
- final、finally、finalize的用法
final: 1.被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承 2.将变量或方法声明为final,可以保证他们在使用的过程中不被修改. 3.被final声明的方法也同样 ...
- 案例1:写一个压缩字符串的方法,例如aaaabbcxxx,则输出a4b2c1x3。
public static String zipString(String str){ String result = "";//用于拼接新串的变量 char last = str ...
- 【C#】Using的一个比较好的语言文字解释
其实很早就开始使用using了.但是对这个语法糖我自己一直没有总结也没有一个很好的文字描述解释.今天看其他的博文的时候发现有人对其做了简单的解释我觉得很好,很适合一种讲解.于是抄录下来 using ( ...
- Wijmo 2017路线图
2016年是Wijmo团队发展和增长的另一个富有成效的一年.回顾我们2016年的路线图,您可以看到我们交付了我们承诺的一切.让我们回顾一下2016年的亮点: 我们第一个全面支持Angular 2 互操 ...
- 网页中动态嵌入PDF文件/在线预览PDF内容https://www.cnblogs.com/xgyy/p/6119459.html
#网页中动态嵌入PDF文件/在线预览PDF内容# 摘要:在web开发时我们有时会需要在线预览PDF内容,在线嵌入pdf文件: 问题1:如何网页中嵌入PDF: 在网页中: 常用的几种PDF预览代码片段如 ...
- 【链接】linuxCentOS权限问题修复(chmod777-R或者chmod755- http://www.cnblogs.com/kofxxf/p/5220836.html
[链接]linuxCentOS权限问题修复(chmod777-R或者chmod755- http://www.cnblogs.com/kofxxf/p/5220836.html