day7:set和深浅copy
1,判断字符串是不是空格isspace函数
s1 = ' '
s2 = ' ssss'
print(s1.isspace())
print(s2.isspace()) 运行结果:
True
False
2,list和dict不可以边循环边删除,删除其中一个,index就变了
li = ["apple","pear","peach","watermelon",'grape']
# 要求删除里面所有的项
for i in range(len(li)):
del li[i] # 错误原因,不可以边循环,边删除,因为删除每一个之后,index就变了,后面的循环就无效了,dict也是这个原因 运行结果:
Traceback (most recent call last):
File "/Users/guolixiao/PycharmProjects/lisa's_practise/boys/7.1.py", line 18, in <module>
del li[i]
IndexError: list assignment index out of range
dict1 = {"name1":"lisa","name2":"lucy","hobby":"piano"}
# 删掉name的key
for i in dict1:
if "name" in i:
del dict1[i]
运行结果:
Traceback (most recent call last):
File "/Users/guolixiao/PycharmProjects/lisa's_practise/boys/7.1.py", line 25, in <module>
for i in dict1:
RuntimeError: dictionary changed size during iteration
3,如何解决上面的问题呢?利用逆向思维,找出要删除的项之外的项,放到另外一个dict或者list里面,然后在赋值给原来的list即可
dict1 = {"name1":"lisa","name2":"lucy","hobby":"piano"}
for i in dict1:
if "name" not in i:
dict2.setdefault(i,dict1[i])
dict1 = dict2
print(dict1.items())
运行结果:
dict_items([('hobby', 'piano')])
4,如果不想这样的话,可以单独把要删除的项找出来,组成一个单独的list,然后再删除,只是不要一边循环原来的字典一边从原来的的字典里面删除就行,因为这样会打乱已有的循环动作
dict1 = {"name1":"lisa","name2":"lucy","hobby":"piano"}
li2 = []
for i in dict1:
if "name" in i:
li2.append(i)
for i in li2: # 发现没循环的不是原来的dict,是新生成的列表
del dict1[i]
print(dict1.items())
运行结果:
dict_items([('hobby', 'piano')])
5,空字典 { } 空集合set(),由于大括号给字典用了了,空字典[] ,空元祖() ,所有这些空值,bool值是false,元祖只有一个值的时候注意加上一个逗号,不然原来是什么类型,还是什么类型
print(type(1))
print(type(1,)) print(type("sss"))
print(type("sss",)) 运行结果:
<class 'int'>
<class 'int'>
<class 'str'>
<class 'str'>
6,集合是可变的数据类型,它里面的数据类型,必须是不可变的数据类型。不可变,意味着可哈希
set1 = {1,2,3,(4,5),"sss",True}
print(set1)
运行结果:
{1, 2, 3, (4, 5), 'sss'}
set2 = {"str",[1,2,3],{"name":"alex"}}
print(set2)
运行结果:
Traceback (most recent call last):
File "/Users/guolixiao/PycharmProjects/lisa's_practise/boys/7.2_set.py", line 12, in <module>
set2 = {"str",[1,2,3],{"name":"alex"}}
TypeError: unhashable type: 'list'
7,集合添加元素add函数
set1 = {1,2,3,(4,5),"sss",True}
print(set1)
set1.add("lisa")
print(set1) # 集合是无序的,找一找,看看新加的元素添加到哪儿啦?
运行结果:
{1, 2, 3, (4, 5), 'sss'}
{'lisa', 1, 2, 3, (4, 5), 'sss'}
8,set也可以迭代增加,把增加的元素,按照最小单位拆分添加update
set1 = {1,2,3,(4,5),"sss",True}
print(set1)
set1.add("lisa")
print(set1) # 集合是无序的,找一找,看看新加的元素添加到哪儿啦?
set1.update("bobocddd") # 这儿无序,去重,迭代添加都体现出来了
print(set1)
运行结果:
{1, 2, 3, (4, 5), 'sss'}
{1, 2, 3, (4, 5), 'lisa', 'sss'}
{1, 2, 3, 'b', (4, 5), 'd', 'lisa', 'o', 'c', 'sss'}
9,删除,pop (remove return arbitrary refer to the introduction of this function)
set1 = {1,2,3,(4,5),"sss",True}
print(set1.pop())
print(set1)
运行结果:
1
{2, 3, (4, 5), 'sss'}
10,删除的另外一种方法,remove ,无返回值,但是如果指定的元素不存在的话,程序会崩溃
set1 = {1,2,3,(4,5),"sss",True}
print(set1.remove("sss"))
print(set1)
# 无返回值
运行结果:
None
{1, 2, 3, (4, 5)}
set1 = {1,2,3,(4,5),"sss",True}
print(set1.remove("XXX",))
print(set1)
运行结果:
Traceback (most recent call last):
File "/Users/guolixiao/PycharmProjects/lisa's_practise/boys/7.2_set.py", line 28, in <module>
print(set1.remove("XXX",))
KeyError: 'XXX'
11,清空集合 clear函数,
12,删除集合 del 函数 ,注意清空完是空集合,del完集合就彻底没了
13,集合也可以遍历,按照for....in....
14,求交集,就是数学概念里面的交集 符号& 或者函数intersection
set1 = {1,2,3,(4,5),"sss",True}
set2 = {3,(4,5),"kkk"}
print(set1&set2)
print(set1.intersection(set2))
运行结果:
{(4, 5), 3}
{(4, 5), 3}
15,求并集,符号|和函数union
set1 = {1,2,3,(4,5),"sss",True}
set2 = {3,(4,5),"kkk"}
print(set1|set2)
print(set1.union(set2))
运行结果:
{'sss', 1, 2, 3, 'kkk', (4, 5)}
{'sss', 1, 2, 3, 'kkk', (4, 5)}
16,反交集 符号^ 或者函数symmetric_difference
set1 ={1,2,3,4,5,6,7}
set2 ={4,5,6,7,8,9,0}
print(set1^set2)
print(set1.symmetric_difference(set2))
运行结果:
{0, 1, 2, 3, 8, 9}
{0, 1, 2, 3, 8, 9}
17,set1 独有的,符号-和different函数
set1 ={1,2,3,4,5,6,7}
set2 ={4,5,6,7,8,9,0}
print(set1-set2) # set1独有的
print(set2-set1) # set2独有的
print(set1.difference(set2))
print(set2.difference(set1))
运行结果:
{1, 2, 3}
{0, 8, 9}
{1, 2, 3}
{0, 8, 9}
18,子集与超集合 符号> 和符号<
set1 ={1,2,3,4,5,6,7}
set2 ={1,2,3,4}
print(set1>set2) #超集
print(set1.issuperset(set2)) #超集
print(set2<set1) #子集
print(set2.issubset(set1)) #子集
运行结果:
True
True
True
True
19,列表去重,先转化为set再把set转化为列表
li = [1,2,3,4,5,6,6,5,4,3,7,6,5,4]
set1 =set(li)
print(set1)
li=list(set1)
print(li) 运行结果:
{1, 2, 3, 4, 5, 6, 7}
[1, 2, 3, 4, 5, 6, 7]
20,深浅copy 浅copy不会改变孙子里面地址,只是儿子地址变了,深copy完完全全一个新的,函数copy和deepcopy
21,enumerate函数
li = ['lisa', 'mary', 'lucy', 'hh']
for i in enumerate(li):
print(i) 运行结果:
(0, 'lisa')
(1, 'mary')
(2, 'lucy')
(3, 'hh') # 可以指定起始位置,自我感觉用处不是很大:
li = ['lisa', 'mary', 'lucy', 'hh']
for i in enumerate(li,3):
print(i) 运行结果:
(3, 'lisa')
(4, 'mary')
(5, 'lucy')
(6, 'hh')
22,集合变成不可变的,frozenset
set1 ={1,2,3,4,5,6,7}
set1=frozenset(set1) #生成一个新的set,注意要赋值回去
print(set1,type(set1))
set1.add(9)
运行结果:
frozenset({1, 2, 3, 4, 5, 6, 7}) <class 'frozenset'>
File "/Users/guolixiao/PycharmProjects/lisa's_practise/boys/7.2_set.py", line 67, in <module>
set1.add(9)
AttributeError: 'frozenset' object has no attribute 'add'
day7:set和深浅copy的更多相关文章
- python 全栈开发,Day7(元组转换,列表以及字典的坑,集合,关系测试,深浅copy,编码补充)
一.元组转换 数字 tu = (1) tu1 = (1,) print(tu,type(tu)) print(tu1,type(tu1)) 执行输出: 1 <class 'int'>(1, ...
- Python基础学习Day7 基础数据类型的扩展 集合 深浅copy
一.基础数据类型的扩展 1.1GBK ---> UTF - 8 # str --->bytes s1 = '太白' # 字符串是unicode编码 b1 = s1.encode('gbk' ...
- python基础3(元祖、字典、深浅copy、集合、文件处理)
本次内容: 元祖 字典 浅copy和深copy 集合 文件处理 1.1元祖 元祖(tuple)与列表类似,不同之处在于元祖的元素不能修改,元祖使用小括号(),列表使用方括号[].元祖创建很简单,只需要 ...
- python学习笔记三 深浅copy,扩展数据类型(基础篇)
深浅copy以及赋值 对于字符串和数字而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy n1 = #n1 = 'hahahaha' #赋值n2 = n1#浅co ...
- Python 第三篇(下):collections系列、集合(set)、单双队列、深浅copy、内置函数
一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在py ...
- Python 基础之函数、深浅copy,set及练习
三元运算符通常在Python里被称为条件表达式,这些表达式基于真(true)/假(not)的条件判断,在Python 2.4以上才有了三元操作. 语法格式: X if C else Y 有了三元表达式 ...
- python基础(三)编码,深浅copy
编码,深浅copy encode,decode在python2中使用的一些迷糊,python3中更容易理解 要理解encode和decode,首先我们要明白编码,字符和二进制的相关概念,简单来说,计算 ...
- Python 集合 深浅copy
一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
- 基础数据类型的补充和深浅copy
一:关于str 的操作方法补充 1,s.isspace() 判断字符串是否只由空格组成,是,为True,否则,为False. s = ' ' #只能是以至少一个空格组成的字符串(全空格) prin ...
随机推荐
- 在Repeater中使用DropDownList的方法
在Repeater中使用DropDownList的方法 以下代码并不完整,只记录了关键的方法 aspx代码中 假设这是一个用户管理的系统的模型,有一个下拉菜单来操作用户状态 <asp:Repea ...
- Ethereum Dapp Tutorial — Part 1
在上一篇文章中,通过和传统的 web程序相比较解释了以太坊平台的结构.作为一个开发者,学习新技术的最好的方式就是构建一个玩具程序. 在这篇文章中我们将会构建一个简单的“hello word”程序,这个 ...
- 引导修复软件boot-repair
因为经常需要安装双系统win10+ubuntu,平时按照先win10,在ubuntu的顺序,是非常顺利的,grub非常智能也非常友好的帮助你双启动这2个系统. 但是,难免会有意外,比如,win10有了 ...
- Asp.Net WebApi swagger使用教程
swagger简介 别名:丝袜哥 功能:用于生产api文档 swagger安装 Nuget搜索swagger,然后安装Swashbuckle swagger使用 生成api的xml文档 webapi项 ...
- android开发(46) 使用 textview实现文字的阴影效果,浮雕效果
前言 最近看到一些文字的阴影效果很有意思,尝试了下,形成本文.“平面效果“是我们平时常见的平面的样子.“阴影效果”会给人一种凸起的感觉.浮雕效果会给一种雕刻“凹陷”的感觉. 演示效果图 方法 使用 t ...
- fresco xml配置属性不起作用
在xml中配置加载等待图标,不起作用. 正确的如下: <?xml version="1.0" encoding="utf-8"?> <Line ...
- SQL-----------------------之ON和WHERE的区别
SQL中ON和WHERE的区别 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户.在使用left jion时,on和where条件的区别如下:1. on ...
- 错误:OSError: [Errno 1] Operation not permitted: 'lib/python/six-1.4.1-py2.7.egg-info'
解决办法: $ $ pip install mock --ignore-installed six --user 问题:安装mock时报错: (venv)➜ test git:(master) pip ...
- Docker 基本指令整理(一)
安装Docker yum install docker 1 1 yum install docker 开机自启动 -- centos 6 service docker start chkconfi ...
- Java8学习笔记(八)--方法引入的补充
在Java8学习笔记(三)--方法引入中,简要总结了方法引入时的使用规则,但不够完善.这里补充下几种情况: 从形参到实例方法的实参 示例 public class Example { static L ...