一.基础数据类型的补充

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. Codeforces 106D Treasure Island 预处理前缀+暴力(水

    主题链接:点击打开链接 意甲冠军: 特定n*m矩阵 # 是墙 . 和字母是平地 最多有26个字母(不反复出现) 以下k个指令. 每一个指令代表移动的方向和步数. 若以某个字母为起点,依次运行全部的指令 ...

  2. React Native细节记录

    1.环境搭建部分 安装完node后建议设置npm镜像以加速后面的过程(或使用***工具).注意:不要使用cnpm!cnpm安装的模块路径比较奇怪,packager不能正常识别! npm config ...

  3. 【37.50%】【codeforces 732D】Exams

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. Scala Control Structures

    Scala之Control Structures 一.前言 前面学习了Scala的Numbers,接着学习Scala的Control Structures(控制结构). 二.Control Struc ...

  5. 如何获得 Qt窗口部件在主窗口中的位置--确定鼠标是否在某一控件上与在控件上的位置

    用Qt Creator 设计程序时,最方便的就是ui设计器,可以很容易的得到想要的布局. 但是这样自动布局带来的后果是很难知道窗口中某一部件在主窗口中的相对位置. 在处理子窗口鼠标事件时变的很麻烦.主 ...

  6. WPF文字描边的解决方法(二)——支持文字竖排和字符间距调整

    原文:WPF文字描边的解决方法(二)--支持文字竖排和字符间距调整 自前天格式化文本效果出来后,今天又添加文本竖排和调整字符间距的功能.另外,由于上次仓促,没来得及做有些功能的设计时支持,这次也调整好 ...

  7. Font Awesome Text 使用方法

    <!-- basic text--> <com.beardedhen.androidbootstrap.FontAwesomeText android:layout_width=&q ...

  8. [Unity3D]Unity3D叙利亚NGUI血液和技能的冷却效果

    ---------------------------------------------------------------------------------------------------- ...

  9. Java 阅读TXT文件

    public class GenCategoryAttrItemHandler { private final static String INPUT_FILE_PATH = "input/ ...

  10. VC++中的C运行时库浅析(控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)

    1.概论 运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的.C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于 ...