一.基础数据类型的补充

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. sql操作xml小总结

    一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XM ...

  2. [Example of Sklearn] - Example

    reference : http://my.oschina.net/u/175377/blog/84420 目录[-] Scikit Learn: 在python中机器学习 载入示例数据 一个改变数据 ...

  3. Java--基础命名空间和相关东西(JAVA工程师必须会,不然杀了祭天)

    java.lang (提供利用 Java 编程语言进行程序设计的基础类)java.lang.annotation(提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互)java.lang.inst ...

  4. Wireshark非标准分析port无流量

    Wireshark非标准分析port无流量 2.2.2  非标准分析port无流量Wireshark非标准分析port流量 应用程序执行使用非标准port号总是网络分析专家最关注的.关注该应用程序是否 ...

  5. WinEdt && LaTex(五)—— 内容的排版

    1. 无序列表 需要的环境是\begin{itemize} \end{itemize} \begin{itemize} \item hello \item world \end{itemize} 2. ...

  6. 如何诊断rac环境sysdate 返回的时间错误

    最近处理了若干rac环境访问sysdate错误的时间返回.而这个问题通常是一个数据库链接是由现在Listener创建的情况下.并且.大部分情况下都是和时区设置相关的.在这篇文章中我们会针对怎样诊断这样 ...

  7. hdu3118Arbiter (使用二分图的定义,枚举每个状态)

    Arbiter Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Sub ...

  8. Python 推断素数

    a = raw_input() #输入数字 a = int(a) #铸造成int b=True #的标记 for i in range(2,a): #从2开始循环本身 if a%i==0: #除了自己 ...

  9. linux_无秘登录问题(不生效)

    1 . 登录1,执行命令 ssh-keygen -t rsa 之后一路回 车,查看刚生成的无密码钥对: cd .ssh 后 执行 ll 2 .把 id_rsa.pub 追加到授权的 key 里面去. ...

  10. WPF 4 DataGrid 控件(基本功能篇)

    原文:WPF 4 DataGrid 控件(基本功能篇)      提到DataGrid 不管是网页还是应用程序开发都会频繁使用.通过它我们可以灵活的在行与列间显示各种数据.本篇将详细介绍WPF 4 中 ...