一.基础数据类型补充

  1. "拼接字符串".join(可迭代对象)

  可迭代对象为列表时,输出列表元素与拼接字符串的拼接

li = ['张三', '李四', '王五', '赵四']
s = '_'.join(li)
print(s)
输出:张三_李四_王五_赵四

  可迭代对象为字符串时,输出单个字符与拼接字符串的拼接

li = 'asdfgh'
s = '_'.join(li)
print(s)
输出:a_s_d_f_g_h

  2.列表与字典的删除补充

  列表和字典在迭代过程中无法进行删除操作,需要把删除的内容记录在新列表中,然后循环新列表,删除字典或列表

li = [11, 22, 33, 44]
for e in li:
li.remove(e)
print(li)
输出:[22, 44] #列表语法删除彻底

  可以循环生成一个新列表,通过循环新列表找到旧列表对应的元素,进行一一删除.

li = [11, 22, 33, 44]
new_li = []
for e in li:
new_li.append(e)
for i in new_li:
li.remove(i)
print(li)
输出:[]

  通过循环索引从后向前删除

li = [11, 22, 33, 44]
for i in range(len(li)):
li.pop()
print(li)
输出:[]

  注意: 由于删除元素会导致元素的索引改变, 所以容易出现问题. 尽量不要在循环中直接去删除元素. 可以把要删除的元素添加到另⼀个集合中然后再批量删除

  字典的删除

dic = {'k1': 'v1', 'k2': 'v2', 's1': 's1'}
del_dic = []
for i in dic:
if 'k' in i:
del_dic.append(i)
for n in del_dic:
dic.pop(n)
print(dic)
输出:{'s1': 's1'}

  字典的fromkey()   生成一个新字典

dic = dict.fromkeys(['jay', 'jj'], ['周杰伦', '林俊杰'])
print(dic)
输出:{'jay': ['周杰伦', '林俊杰'], 'jj': ['周杰伦', '林俊杰']}

  前面的列表中的每一个元素作为新字典的key,后面列表整体作为新字典的value

dic = dict.fromkeys(['jay', 'jj'], ['周杰伦', '林俊杰'])
print(dic)
dic.get('jay').append('小马')
print(dic)
输出:
{'jay': ['周杰伦', '林俊杰'], 'jj': ['周杰伦', '林俊杰']}
{'jay': ['周杰伦', '林俊杰', '小马'], 'jj': ['周杰伦', '林俊杰', '小马']}

  注意:代码中只是更改了jay那个列表.由于jay和jj用的是同一个value列表.所以,前面的改变后面的也会跟着改变

  类型转换

  元组 => 列表  list(tuple)

  列表 => 元组  tuple(list)

  list => str  str.join(list)

  str => list  str.split()

  转换成False

  0,'',None,[],(),{},se() ==> False

二.set集合

  1.特点:

      无序,不重复,元素必须是可哈希的(不可变的)   (不可变的可哈希.    可变的不可哈希)

集合本身是可变的数据类型,不可哈希,有增删查改操作

  2.作用:

      去重复

li = [123, 321, 345, 564, 465, 345]
s = set(li)
print(s)
n = list(s)
print(n)
输出:

{321, 465, 564, 345, 123}
[321, 465, 564, 345, 123]

  增加:

    add()    update()

s = {123, 432, 'sdf'}  
s.add('jffj')       #添加,不能添加重复的内容
print(s)
s.update('周杰伦')     #迭代更新
print(s)
输出:

{432, 'jffj', 123, 'sdf'}
{'jffj', 'sdf', '伦', '周', 432, '杰', 123}

  删除:

    pop()       remove()      clear()

s = {'jffj', 'sdf', '伦', '周', 432, '杰', 123}
s.pop()          #随机删除一个
print(s)
s.remove('周')      #直接删除元素
print(s)
s.clear()         #清空set集合 
print(s)
输出:

{'杰', 'jffj', 'sdf', 432, '周', 123}
{'杰', 'jffj', 'sdf', 432, 123}
set()

  修改:

    set集合是无序的,没有索引,不能直接修改,只能通过先删除后添加的方式完成修改操作.

s = {'jffj', 'sdf', '伦', '周', 432, '杰', 123}
s.remove('周')      #移除'周'
s.add('马')        #添加'马'
print(s)
输出:{'马', 123, '杰', 432, 'sdf', '伦', 'jffj'}

  查询:

    set集合是一个可迭代的对象,可以进行for循环查询

s = {'jffj', 'sdf', '伦', '周', 432, '杰', 123}
for i in s:
print(i)
输出:


123
432
jffj


sdf

三. 深浅拷贝

  1. 直接赋值    没有创建新对象,共用同一个对象

lst1 = ["⾦金金⽑毛狮王", "紫衫⻰龙王", "⽩白眉鹰王", "⻘青翼蝠王"]
lst2 = lst1
print(lst1)
print(lst2)
lst1.append("杨逍")
print(lst1)
print(lst2)
输出:

['⾦金金⽑毛狮王', '紫衫⻰龙王', '⽩白眉鹰王', '⻘青翼蝠王']
['⾦金金⽑毛狮王', '紫衫⻰龙王', '⽩白眉鹰王', '⻘青翼蝠王']
['⾦金金⽑毛狮王', '紫衫⻰龙王', '⽩白眉鹰王', '⻘青翼蝠王', '杨逍']
['⾦金金⽑毛狮王', '紫衫⻰龙王', '⽩白眉鹰王', '⻘青翼蝠王', '杨逍']

  对于list,dict,set来说,直接赋值,就是把内存地址交给变量,并不是复制一份.所以lst1和lst2的内存指向是一样的,lst1改变了,lst2也会跟着改变.

浅拷贝:    拷贝第一层列表内容,共用内层列表内容. 切片[:]或copy()

     例:lst1 = ['金毛狮王', '紫衫龙王', '青翼蝠王', '白眉鹰王', ['张无忌', '赵敏', '周芷若']]

        lst2 = lst1[:]

        

#第一层添加元素
lst1 = ["金毛狮王", "紫衫龙王", "青翼蝠王", "白眉鹰王",["张无忌","赵敏","周芷若"]]
lst2 = lst1[:]         #拷贝第一层内容,列表lst2与lst1的列表['张无忌', '赵敏', '周芷若']的内存地址是同一个
lst1.append('小昭')      #在lst1中添加元素
print(lst1)
print(lst2)
print(id(lst1))
print(id(lst2))
输出:              #只拷贝第一层内容,lst1添加元素lst2不会发生改变

['金毛狮王', '紫衫龙王', '青翼蝠王', '白眉鹰王', ['张无忌', '赵敏', '周芷若'], '小昭']
['金毛狮王', '紫衫龙王', '青翼蝠王', '白眉鹰王', ['张无忌', '赵敏', '周芷若']]
82725424
83085232

  

#在内层添加元素
lst1 = ["金毛狮王", "紫衫龙王", "青翼蝠王", "白眉鹰王",["张无忌","赵敏","周芷若"]]
lst2 = lst1[:]          #列表lst2与lst1的列表['张无忌', '赵敏', '周芷若']的内存地址是同一个
lst1[4].append('小昭')     #在内层列表中添加元素 print(lst1) print(lst2) print(id(lst1)) print(id(lst2))
输出:  #只拷贝第一层,共用第二层列表内容内存地址,lst1第二层列表元素改变,lst2跟着改变.

['金毛狮王', '紫衫龙王', '青翼蝠王', '白眉鹰王', ['张无忌', '赵敏', '周芷若', '小昭']]
['金毛狮王', '紫衫龙王', '青翼蝠王', '白眉鹰王', ['张无忌', '赵敏', '周芷若', '小昭']]
52513328
52873176

  

深拷贝:把元素内部的元素也拷贝,改变原列表,(字典,集合)新列表(字典,集合)数据不会跟着改变

import copy               #深度拷贝,需要导入copy模块
lst1 = ["金毛狮王", "紫衫龙王", "青翼蝠王", "白眉鹰王",["张无忌","赵敏","周芷若"]]
lst2 = copy.deepcopy(lst1)      #深度拷贝lst1,列表lst2与lst1的列表['张无忌', '赵敏', '周芷若']的内存地址不同
lst1[4].append('小昭')         #对lst1中的第二层列表添加元素 print(lst1) print(lst2) print(id(lst1)) print(id(lst2))
输出:              #深度拷贝,改变lst1内第二层列表元素,lst2不会发生改变

['金毛狮王', '紫衫龙王', '青翼蝠王', '白眉鹰王', ['张无忌', '赵敏', '周芷若', '小昭']]
['金毛狮王', '紫衫龙王', '青翼蝠王', '白眉鹰王', ['张无忌', '赵敏', '周芷若']]
88552112
88554232

  

基础数据类型补充 set集合 深浅拷贝的更多相关文章

  1. 基本数据类型补充 set集合 深浅拷贝

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

  2. 基础数据 补充 set() 集合 深浅拷贝

    一  对字符串的操作 li = ["张曼玉", "朱茵", "关之琳", "刘嘉玲"] s = "_" ...

  3. 基本数据类型补充,set集合,深浅拷贝等

    1.join:将字符串,列表,用指定的字符连接,也可以用空去连接,这样就可以把列表变成str ll = ["wang","jian","wei&quo ...

  4. Python基础学习Day7 基础数据类型的扩展 集合 深浅copy

    一.基础数据类型的扩展 1.1GBK ---> UTF - 8 # str --->bytes s1 = '太白' # 字符串是unicode编码 b1 = s1.encode('gbk' ...

  5. js 基础数据类型和引用类型 ,深浅拷贝问题,以及内存分配问题

    js 深浅拷贝问题 浅拷贝一般指的是基本类型的复制 深拷贝一般指引用类型的拷贝,把引用类型的值也拷贝出来 举例 h5的sessionStorage只能存放字符串,所以要存储json时就要把json使用 ...

  6. Python学习基础(二)——集合 深浅拷贝 函数

    集合 # 集合 ''' 集合是无序不重复的 ''' # 创建列表 l = list((1, 1, 1)) l1 = [1, 1, 1] print(l) print(l1) print("* ...

  7. python学习打卡 day07 set集合,深浅拷贝以及部分知识点补充

    本节的主要内容: 基础数据类型补充 set集合 深浅拷贝 主要内容: 一.基础数据类型补充 字符串: li = ["李嘉诚", "麻花藤", "⻩海峰 ...

  8. python基础数据类型补充

    python_day_7 一. 今日主要内容: 1. 补充基础数据类型的相关知识点 str. join() 把列表变成字符串 列表不能再循环的时候删除. 因为索引会跟着改变 字典也不能直接循环删除.把 ...

  9. python基础(9):基本数据类型四(set集合)、基础数据类型补充、深浅拷贝

    1. 基础数据类型补充 li = ["李嘉诚", "麻花藤", "⻩海峰", "刘嘉玲"] s = "_&qu ...

随机推荐

  1. 读书笔记---《Docker 技术入门与实践》---为镜像添加SSH服务

    之前说到可以通过attach和exec两个命令登陆容器,但是如果遇到需要远程通过ssh登陆容器的场景,就需要手动添加ssh服务. 下面介绍两种方法创建带有ssh服务的镜像,commit命令创建和通过D ...

  2. linux 下格式化命令小记

    mkfs.ext4 /dev/sda1    # 格式化为ext4分区mkfs.ext3 /dev/sda1    # 格式化为ext3分区mkfs.ext2 /dev/sda1    # 格式化为e ...

  3. hadoop–JobTracker 相关

    JobTracker 内部使用三层表示: JobInProgress: 跟踪和监控作业运行状态的对象.每个Job分成了多个Task.并为每个Task创建一个TaskInProgress跟踪和监控其运行 ...

  4. python中while与else的联姻

    循环使用 else 语句在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断 ...

  5. Java判断链表是否为回文链表

    请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 思路:1.通过快慢指针,来遍历链表 ...

  6. Spring容器对Bean组件的管理

    Bean对象创建 默认是随着容器创建 可以使用 lazy-init=true:在调用 getBean 延迟创建 也可以用 <beans default-lazy-init="true& ...

  7. 【转载】带你吃透RTMP

    RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing) ...

  8. Sublime 安装、删除插件

    安装 按 Ctrl + Shift + P 输入Install Package 输入 要安装的插件名称,enter即可 删除 按 Ctrl + Shift + P 输入Remove Package 选 ...

  9. PaperWeekly 第五期------从Word2Vec到FastText

    PaperWeekly 第五期------从Word2Vec到FastText 张俊 10 个月前 引 Word2Vec从提出至今,已经成为了深度学习在自然语言处理中的基础部件,大大小小.形形色色的D ...

  10. Function Run Fun-递归+细节处理

    We all love recursion! Don't we? Consider a three-parameter recursive function w(a, b, c): if a < ...