内容概要: 数据类型操作补充 集合及其操作 深浅拷贝
1.基础数据类型补充
1.1字符串的操作补充
li = ["李嘉诚", "麻花藤", "黄海峰", "刘嘉玲"]
s = "_".join(li) # 添加后列表变成字符串
print(type(s),s) li = "黄花大闺女"
s = "_".join(li) # 仍然是字符串
print(type(s),s) 1.2列表的循环删除(for循环) 不能用for循环要删除的列表(tips:字典在循环过程中不允许增加和删除,可以对内容修改),因为删除元素会引起索引号位置发生变化,导致报错或者删除不完全
常用删除的方法有 1.创建另外一个新列表,并将要删除的值赋予新列表,循环新列表来删除对应旧列表的信息
new_lis = []
lis = ["李嘉诚", "麻花藤", "黄海峰", "刘嘉玲"]
for i in lis:
if i.startswith("刘"):
new_lis.append(i)
for el in new_lis:
lis.remove(el)
print(lis) 2.也可用.pop来删除,但较麻烦不推荐
lis = ["李嘉诚", "麻花藤", "黄海峰", "刘嘉玲"]
for i in lis: # 这样不行
lis.pop()
print(lis) for i in range (0,len(lis)): #这样才可以,计算lis长度,利用计数弹出
lis.pop()
print(lis) 3.fromkeys 主要形式:dict.fromkeys(iter, value),把可迭代对象进行迭代。和后面的value组合成键值对,返回新字典
实例
dic = dict.fromkeys(["李嘉诚", "麻花藤"],["黄海峰"])
print(dic) 3.1 几个大坑
坑一
dic = {}
dic1 = dic.fromkeys(["李嘉诚", "麻花藤"],["黄海峰"])
print(dic) #输出是个空字符{},因为 fromkeys 是创建一个新列表,如果dic原本就存在,则此过程会忽略 坑二
dic1 = dict.fromkeys(["李嘉诚", "麻花藤"],["黄海峰"])
dic1["李嘉诚"].append("黄花菜")
print(dic1) # 输出 {'李嘉诚': ['黄海峰', '黄花菜'], '麻花藤': ['黄海峰', '黄花菜']} 因为指向同一个列表 set 集合 特点:1.set内的元素是不可以改变,可HASH的 2.不可重复,无序 1.1 set内的元素是不可以改变,可HASH的
set1 = {'1','alex',2,True,[1,2,3]} # 报错
set2 = {'1','alex',2,True,{1:2}} # 报错
set3 = {'1','alex',2,True,(1,2,[2,3,4])} # 报错 1.2 不可重复,无序(很重要,可以用来去除重复项)
s = {"周杰伦", "周杰伦", "周星星"}
print(list(set(s))) # 结果:{'周星星', '周杰伦'} 2.集合的操作
2.1增
s = {"周杰伦", "彭于晏", "周星星"}
s.add("尼古拉斯赵四")
print(s) s = {"刘嘉玲", '关之琳', "王祖贤"}
s.update("麻花藤") # 迭代更更新
print(s)
s.update(["张曼玉", "李若彤","李若彤"])
print(s) 2.2 删
s = {"周杰伦", "彭于晏", "周星星"}
s.clear()
s.remove("彭于晏")
item = s.pop() #随机弹出一个,每次运行结果都不一样。
print(item)
print(s) 2.3.改
# 集合因为没有索引,是无序的,不能直接修改,可采用先删除后添加的方式
s = {"周杰伦", "彭于晏", "周星星"}
s.remove("彭于晏")
s.add("尼古拉斯赵四")
print(s) 2.4 查 set是可迭代对象,可用For循环便利查询
for el in set:
print(set) 2.5 其他操作
s1 = {"刘能", "赵四", "皮长山"}
s2 = {"刘科长", "冯乡长", "皮长山"} print(s1 & s2) # 交集
print(s1 | s2) # 并集
print(s1 - s2) # 差集,得到第一个中单独存在的
print(s2 - s1) # 差集,得到第二个中单独存在的
print(s1 ^ s2) # 反并集,并集减去交集 s1 = {"刘能", "赵四"}
s2 = {"刘能", "赵四", "⽪皮⻓长⼭山"}
print(s1 > s2) # 超集,判断s1是否为s2的超集
print(s1 < s2) # 子集,判断s1是否为s2的子集 3.深浅拷贝 3.1 赋值
dic1 = {"id": 123, "name": "谢逊"}
dic2 = dic1
print(dic1)
print(dic2) dic1['name'] = "范瑶"
print(dic1)
print(dic2) 结果:
{'id': 123, 'name': '谢逊'}
{'id': 123, 'name': '谢逊'}
{'id': 123, 'name': '范瑶'}
{'id': 123, 'name': '范瑶'}
总结:直接赋值. 其实是把内存地址交给变量量. 并不是复制⼀份内容. 所以.lst1的内存指向和lst2是⼀一样的. lst1改变了了, lst2也发⽣生了了改变 3.2 浅拷贝 只会拷贝第一层. 第⼆层的内容不会拷贝. 所以被称为浅拷⻉
lst1 = ["何炅", "杜海涛","周渝民", ["麻花藤", "马芸", "周笔畅"]]
lst2 = lst1.copy()
lst1.append("刘德华")
print(lst1)
print(lst2)
print(id(lst1), id(lst2)) # 改变lst第一层的元素,发现拷贝的列表不会改变,并且第一层的内存id也完全不一样
lst1[3].append("无敌是多么寂寞")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3])) # 改变lst第2层的元素,发现拷贝的列表第二层一起改变,并且第2层的内存id也完全一样 3.3 深度拷贝. 把元素内部的元素完全进行拷贝复制. 不会产生一个改变另一个跟着改变的问题
import copy # 引进拷贝
lst1 = ["何炅", "杜海涛","周渝民", ["麻花藤", "马芸", "周笔畅"]]
lst2 = copy.deepcopy(lst1) # copy.deepcopy() 深度拷贝的表达形式
lst1.append("刘德华")
print(lst1)
print(lst2)
print(id(lst1), id(lst2)) # 改变lst第一层的元素,发现拷贝的列表不会改变,并且第一层的内存id也完全不一样
lst1[3].append("无敌是多么寂寞")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3])) # 改变lst第2层的元素,发现拷贝的列表第二层也不会一起改变,并且第2层的内存id也完全不一样

python基础之数据类型操作补充,集合及其操作,深浅拷贝的更多相关文章

  1. Python全栈之路3--set集合--三元运算--深浅拷贝--初识函数

    一.上节课的重点回顾: 1.类名加括号其实就是执行类的__init__方法: 2.int a.创建方式 n1 = 123 #根据int类创建了一个对象 n2 = int(123) #根据int类创建一 ...

  2. python基础之 数据类型的补充,小数据类型

    1.id is详解 ID 在Python中,id是什么?id是内存地址,比如你利用id()内置函数去查询一个数据的内存地址: name = 'nba' print(id(name)) # 158583 ...

  3. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  4. 第二章:python基础,数据类型

    """第二章:python基础,数据类型2.1 变量及身份运算补充2.2 二进制数2.3 字符编码每8位所占的空间位一个比特,这是计算机中最小的表示单位.每8个比特组成一 ...

  5. Python基础之数据类型

    Python基础之数据类型 变量赋值 Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值 ...

  6. python基础一数据类型之字典

    摘要: python基础一数据类型之一字典,这篇主要讲字典. 1,定义字典 2,字典的基础知识 3,字典的方法 1,定义字典 1,定义1个空字典 dict1 = {} 2,定义字典 dict1 = d ...

  7. python基础之字典dict和集合set

    作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7043642.html python基础之字典dict和集合set 字典dic ...

  8. 第八天- 基础数据操作补充 集合set 深浅拷贝

    字符串的操作补充: .join() 方法用于将序列(字符串/列表/元组/字典)中的 元素 以指定的字符连接生成一个新的字符串 str = "人生苦短我用python!" # 用于字 ...

  9. python基础一数据类型之集合

    摘要: python基础一中介绍数据类型的时候有集合,所以这篇主要讲集合. 1,集合的定义 2,集合的功能 3,集合的方法 1,集合的定义 list1 = [1,4,5,7,3,6,7,9] set1 ...

随机推荐

  1. 再谈fedora23下Virutalbox的安装. --问题的关键在于 安装kernel-devel包

    首先, 要使用 virutalbox的 rpm 安装包 进行安装. 在安装的过程中, 如果提示 有一些包, 没有, dependencies not resolved, 比如libQt..libvpx ...

  2. 【做题】arc070_f-HonestOrUnkind——交互+巧妙思维

    做的第一道交互题-- 首先,有解的一个必要条件是\(a>b\).否则,即当\(a<=b\)时,可以有\(a\)个unkind的人假装自己就是那\(a\)个honest的人.(彼此之间都说是 ...

  3. SSM项目问题中遇到 GET请求中有中文的情况

    GET传参有中文的情况 特别 由于准备春招,所以希望各位看客方便的话,能去github上面帮我Star一下项目 https://github.com/Draymonders/Campus-Shop 问 ...

  4. 【C#】委托的发展

    "用事件去处理程序, 进而解决问题" ---- 委托的目的 委托早在C#2的时候就已经初具模型, 但是并不是特别灵活, 制止C#3才在代码中被广泛使用. C#4中泛型委托, C#5 ...

  5. RabbitMQ.client消息队列

    doc 介绍 分类&&典型应用 中文文档 使用

  6. 每天一个小程序—第0001题(uuid模块)

    第 0001 题:  做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 一开始以为是 ...

  7. ImgQuoteUIWindow

    using System;using UnityEngine;using UnityEngine.UI;using UnityEditor;using System.Collections;using ...

  8. MySQL数据库自动备份

    1.vi /home/wangcn/auto_log.sh#!/bin/bash #Shell Command For Backup MySQL Database Everyday Automatic ...

  9. 关于Java类和包的那些事

    *.Java文件 问题:一个.java源文件中是否可以包括多个类(不是内部类)?有什么限制? 答案:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致.一个文件中可以 ...

  10. 原生JS操作iframe里的dom

    转:http://www.css88.com/archives/2343 一.父级窗口操作iframe里的dom JS操作iframe里的dom可是使用contentWindow属性,contentW ...