一.基础数据类型的补充

1.str中的join算法,将列表转换成字符串,并用'_'(或其他)

 li=['李嘉诚','马化腾','刘嘉玲','黄海峰',]
s='_'.join(li)
print(s) #李嘉诚_马化腾_刘嘉玲_黄海峰

2.循环删除列表中的每个元素

li=['李嘉诚','马化腾','刘嘉玲','黄海峰',]
for el in li:
li.remove(el)
print(li) #['马化腾', '黄海峰']

原因分析:for循环在运行过程中会有一个指针记录当前循环的元素是哪一个.

方法一:

 li=['李嘉诚','马化腾','刘嘉玲','黄海峰',]
for i in range(0,len(li)):
li.pop() #括号中什么也不写,默认删除最后一个
print(li) #[]

方法二:删除元素会导致列表中元素的索引发生改变,所以容易出现问题.

 li=['李嘉诚','马化腾','刘嘉玲','黄海峰',]
del_li=[]
for el in li:
del_li.append(el) #用另一个列表来记录我要删除的内容
for el in del_li: #循环另一个列表
li.remove(el) #把原列表中的每一个元素对应删除
print(li) #[]

字典也是如此:

 dic = {"提莫":"冯提莫", "发姐":"陈一发儿", "55开":"卢本伟"}
lis=[]
for el in dic:
lis.append(el)
for el in lis:
dic.pop(el)
print(dic) #{}

3.dict中的元素在迭代的过程中是不允许进行删除的,要想删除,就要把想删除的元素暂时保存在一个list中,在循环list删除.

 dic = {"提莫":"冯提莫", "发姐":"陈一发儿", "55开":"卢本伟"}
lis=[]
for el in dic:
if el.startswith('提'):
lis.append(el)
for el in lis:
dic.pop(el)
print(dic) #{'发姐': '陈一发儿', '55开': '卢本伟'}

4.dict中的dict.fromkeys(),可以帮助我们通过list创建一个dict

 a','b'],['c','d'])
print(dic) #{'a': ['c', 'd'], 'b': ['c', 'd']} 前面的迭代被作为字典的键,后面的被作为字典的value

5.字符串和列表的相互转换

把字符串转换成列表:split()

把列表转换成字符串:join()

二.set集合

特点:set中的元素是无序的,不重复的,里面的元素必须是可hash的(int,str,tuple,bool),set就是字典类型的数据,但是不保存value.set用{}表示.

注意:set集合中的元素必须是可hash的,但是set本身是不可hash的.

不可重复,无序(一般用来去重):

 s={'','',''}
print(s) #第一次运行{'1', '2'} 第二次运行{'2', '1'}

1.增

(1) s.add():

 s={'刘嘉玲','张曼玉','王祖贤'}
s.add('美丽的我')
s.add('王祖贤') #重复的内容不会添加到set中
print(s) #{'刘嘉玲', '美丽的我', '王祖贤', '张曼玉'}

(2) s.update():

 s={'刘嘉玲','张曼玉','王祖贤'}
s.update('马化腾') #迭代添加
print(s) #{'化', '刘嘉玲', '张曼玉', '腾', '王祖贤', '马'}

2.删

(1)  s.pop()

 s={'刘嘉玲','张曼玉','王祖贤'}
# a=s.pop() #随机删除一个
# print(a)
# print(s)

(2) s.remove()

 s={'刘嘉玲','张曼玉','王祖贤'}
# s.remove('刘嘉玲') #直接删除指定元素,如果不存在会报错
# print(s)

(3) s.clear()

 s={'刘嘉玲','张曼玉','王祖贤'}
s.clear()
print(s) #set()

3.改

set中的数据没有索引,所以没有办法定位一个元素,因此没有办法进行直接修改.

我们可以采用先删除后添加的方式进行修改

#把刘嘉玲改成赵本山
s={'刘嘉玲','张曼玉','王祖贤'}
s.remove('刘嘉玲') #删除
s.add('赵本山') #添加
print(s) #{'赵本山', '张曼玉', '王祖贤'}

4.查

用for循环进行查看

 s={'刘嘉玲','张曼玉','王祖贤'}
for el in s: #王祖贤
print(el) #刘嘉玲
#张曼玉

5.常用操作

 s1={'刘能','赵四','皮长山'}
s2={'刘科长','冯科长','皮长山'}
print(s1 & s2) #交集
print(s1.intersection(s2)) #交集 print(s1 | s2) #并集
print(s1.union(s2)) #并集 print(s1 - s2) #差集
print(s1.difference(s2)) #差集 print(s1 ^ s2) #反差集
print(s1.symmetric_difference(s2)) #反差集 print(s1 < s2) #子集
print(s1.issubset(s2)) #子集 print(s1 > s2) #超集
print(s1.issuperset(s2)) #超集

三.深浅拷贝

1. 赋值. 没有创建新对象. 公用同一个对象
2. 浅拷贝. 拷贝第一层内容. [:]或copy()
 lst1=['何炅','杜海涛','谢娜',['李维嘉']]
lst2=lst1.copy()
  print(lst1)           #2571062967176
print(lst2) #2571062967176
 print(id(lst1[3])) #  print(id(lst2[3])) #
3. 深拷贝. 拷贝所有内容. 包括内部的所有.
 import copy
lst1=['何炅','杜海涛','谢娜',['李维嘉']]
lst2=copy.deepcopy(lst1)
print(lst1)
print(lst2)
print(id(lst1),id(lst2)) #3135828524616 3135828628360

 

python中的set集合和深浅拷贝的更多相关文章

  1. 2018.8.3 python中的set集合及深浅拷贝

    一.字符串和列表的相互转化 之前写到想把xx类型的数据转化成yy类型的数据,直接yy(xx)就可以了,但是字符串和列表的转化比较特殊,相互之间的转化要通过join()和split()来实现. 例如: ...

  2. 关于python中一切皆对象和深浅拷贝

  3. Python中的变量、引用、拷贝和作用域

    在Python中,变量是没有类型的,这和以往看到的大部分编辑语言都不一样.在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可.但是,当用变量的时候,必须要给这个变量赋值:如果只写一个变量,而没 ...

  4. Python中字典和集合

    Python中字典和集合 映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元 ...

  5. python之set集合、深浅拷贝

    一.基本数据类型补充 1,关于int和str在之前的学习中已经介绍了80%以上了,现在再补充一个字符串的基本操作: li = ['李嘉诚','何炅','海峰','刘嘉玲'] s = "_&q ...

  6. python之set集合及深浅拷贝

    一.知识点补充 1.1字符串的基本操作 li =["李李嘉诚", "麻花藤", "⻩黄海海峰", "刘嘉玲"] s = ...

  7. 从入门到自闭之Python集合,深浅拷贝(大坑)

    小数据池 int: -5~256 str: 字母,数字长度任意符合驻留机制 字符串进行乘法时总长度不能超过20 特殊符号进行乘法时只能乘以0 代码块: 一个py文件,一个函数,一个模块,终端中的每一行 ...

  8. python day 07-数据类型补充,集合,深浅拷贝

    一.基础数据类型补充 1.列表转字符串 a='A'.join(['c','c','s']) print(a) 2.循环删除列表中的每⼀一个元素 lst=['asdf','dftgst','zsdrfs ...

  9. python随笔 join 字典,列表的清空 set集合 以及深浅拷贝(重点..难点)

    一,字符串和列表的转换 1.str中的 join 方法: 把列表转换成字符串 # 将列表转换成字符串. 每个元素之间用_连接 s = '**'.join(['李启政',' 郑强' , '孙福来']) ...

随机推荐

  1. 前端构建工具里babel-polyfill的使用问题

    看了很多react工程的package.json文件,里面都没有使用babel-polyfill,那对ES6的新API是如何做到被IE9这样的浏览器识别的呢,难道在webpack打包的时候通过别的方式 ...

  2. 解析URL查询字符串参数为对象以及老浏览器的getElementsByClassName

    高程3使用拼接字符串形式解析的查询字符串,网上有各种正则方式解析的,记得太多,临时需要写的时候,自己都搞混乱了.只记一种吧,用正则. function getQueryStringArgs() { v ...

  3. 前端常见算法JS实现

    算法是程序的灵魂,一个优秀的前端工程师对算法也是要有所了解的. 排序算法 1. 冒泡排序 //冒泡排序 function bubbleSort(arr){ var i = j = 0; for(i=1 ...

  4. wxWindows

    用C++编写跨平台程序 中文版说明 本教程由Gxl117翻译并将继续维护,这是本教程的第一稿,假设发现错误请与我(Email:gxl117@yahoo.com.cn)联系让我能及时修正它.之后还会对这 ...

  5. HDU 1010 Tempter of the Bone heuristic 修剪

    的问题是,在测试修剪. 应该说是更先进的应用. 由于使用的heuristic(经验)修剪.总结这方面的经验法则,别easy.我说,这也是由于先进的在线报告中的应用程序没有分析太多太好的解决这个问题,计 ...

  6. Delphi 快速获取文件大小(使用_lopen和FileSeek,此函数可以快速获取文件大小,即使文件已经被其它程序锁定)

    function GetFileSize(const fName: AnsiString): Int64; var hFile: THandle; begin hFile := _lopen(PAns ...

  7. 正定矩阵(definite matrix)

    1. 基本定义 在线性规划中,一个对称的 n×n 的实值矩阵 M,如果满足对于任意的非零列向量 z,都有 zTMz>0. 更一般地,对于 n×n 的 Hermitian 矩阵(原矩阵=共轭转置, ...

  8. WPF 自定义的图表(适用大量数据绘制)

    原文:WPF 自定义的图表(适用大量数据绘制) 在WPF中绘制图表比较简单,有很多的第三方控件,但是在绘制大量数据的时候,就显得有些吃力,即便是自己用StreamGeometry画也达不到理想的效果, ...

  9. ubuntu如何修改terminal终端的主机名(修改/etc/hostname文件)

    有时候安装完Ubuntu系统后,打开命令终端,终端显示的主机名格式比较难看,例如 我最近买的国内某云的VPS. xxx@VM-1560-ubuntu$ xxx@VM-1560-ubuntu$ 对于有洁 ...

  10. XF Grid使用-两行两列-跟WPF不同

    <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http:/ ...