博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第1月2周5天
阅读量:5875 次
发布时间:2019-06-19

本文共 3451 字,大约阅读时间需要 11 分钟。

  1. 基础数据类型补充
  2. 集合set
  3. 深浅copy

七步记忆法

预习(20min)
听课
课间(课堂代码多敲)
下午晚上练习
网上睡觉前回忆
第二天早上
每周总结(默写这周学习的东西,然后对照)
每月总结

!!!error 疑问

在同一个代码块,是先从小数据池去找还是去代码块去找?
!!!

如果b1:gbk的bytes类型---->utf-8的bytes类型怎么办?

先将gbk解码成unicode,再将unicode编码成utf-8

英文字母,数字,特殊字符可以互相转换,因为他们引用的都是ASCII

s1 = "alex"b1 = s1.encode("gbk")s2 = b1.decode("utf-8"e)print(s2)

enumerate

enumerate(iterable,int)

需要可迭代对象,返回元组(索引,值)。
默认初始索引从0开始。

基础数据类型(三)(坑篇)

如何看源码?

元组

"元组中只有一个数据,且没有逗号,则该元组与里面数据的数据类型相同"

tu = (1) 数字类型tu2 = ("alex")字符串类型tu3  =(1,)元组类型

列表

"列表与列表可能相加"l1 = [1,2,3]l2 = ["alex","wusir"]l3 = l1 + l2print(l3)l1

!!!error 强调

在循环一个列表时,不能对列表进行改变大小操作,会对索引改变,产生改变

!!!

"""删除列表索引的奇数位的值"""l1 = [11,22,33,44,55,66,77] #错误for i in range(1,len(l1)-2,2):     l1.pop(i)  #删除之后列表改变了,再次循环的下一个元素都变了。再去判断索引,和最开始的预期是不符的。列表不会动态测试。#删除动作不仅是删除还是改变列表的大小。 print(l1)"从后删除"for i in range(len(l1)-2,-1,-2):    l1.pop(i)print(l1)"切片"print(l1[0::2])"取出偶数"l = [l1[i] for i in range(len(l1)) if i % 2 == 0]print(l)

字典

dict.fromkeys() 创建字典的方式创建字典的方式dic={}dic={a:b for a in l1 for b in l2 }dic = dict({"name":"alex"})dic = dict.fromkeys([1,2,3],"alex")"陷阱"dic1 = dict.fromkeys([1,2,3],[])print(dic1)dic1[1].append("alex")print(dic1)print(id(dic[1])) #添加的同一个列表容器print(id(dic[2]))print(id(dic[3]))

!!!error 强调

字典在迭代过程中,不能改变字典的大小,例如增加字典或者删除同一个字典.直接报错。
!!!

dic = {"k1":"1","k2":"2","na":"1"}ll = []for i in dic.keys():    if "k" in i:        ll.append(i)for i in ll:    dic.pop(i)print(dic)"方式一"dic = {"k1":"1","k2":"2","na":"1"}dic1 = {}for i in dic.keys():    if not "k" in i:        dic1.setdefault(i,dic[i])"方式二"dic = {"k1":"1","k2":"2","na":"1"}dic1 = {i:dic[i] for i in dic.keys() if not "k" in i}        print(dic1)

int str bool bytes

str -> list

s1 = " alex wusir taibai"l1 = s1.split()print(l1)

list -> str 此list种的元素必须是str类型

list = ["sfs","sfs","qeqw"]"".join(list)

dict.keys() dict.values() dict.items() --> list

list --> tuple

tuple --> list

tu2 = (1,)l1 = list(t2)

dic-->list 默认是将keys都转过去

li = list(dic)

list --> dic 不能直接转

0,{ },[ ],( )," " --> bool False

集合 set

与大数据有关用的多一些

集合要求里面的元素必须是不可变的数据类型,> 元素需要可哈希的。

集合本身是可变的数据类型
集合里面的元素不重复(天然去重),无序。
主要用途:去重,关系测试

set1 = {"wusir","alex",1,2,3}set2 = set({"alex","wusir"})

list --> set

list去重,用set效率最高

l1 = [1,2,3,4,5,6,4] #3.7集合为元素自动排序set1 = set(l1)

set1 = {"alex","wusir"}set1.add("女神")set1.update("abc") 迭代加入 类似列表extend

set1.remove("alex") set1.pop() 随机删除set1.clear() #set()表示空集合del set1set1.discard() #与remove功能相同,删除元素不存在时不会抛出异常

关系测试

"交集"set1 & set2set1.intersection(set2)"并集"set1|set2set1.union(set2)"反交集" set1^set2set1.symmetric_difference(set2)"差集" #某一方独有的set1 - set2 #子集 - 超集set1.difference(set2)"子集"set1 < set2 #返回True 表示子集set1.issubset(set2)"超集"set2 > set1 #返回True 表示超集set2.issuperset(set1)"冻集合"不可变数据类型,可以表示为字典的keyset1 = {1,2,3}set3 = frozenset(set1)

"冻集合"不可变数据类型,可以表示为字典的key

深浅拷贝copy

浅拷贝

l1 = [1,2,3]l2 = l1.copy()l1.append(666)print(id(l1))print(id(l2))l1 = [1,2,3,[22,]]l2 = l1.copy() #浅拷贝执行时,开辟一个内存空间赋给新变量,再将元素的地址复制到这个空间中。print(id(l1))print(id(l2))l2[-1].append(33)print(l1)print(l2)

深拷贝

import copyl1 = [1,2,3,[22,]]l2 = copy.deepcopy(l1) #完全独立的copy一个数据print(l1,l2)l1[-1].append("太白")print(l1,l2)

!!!note copy

完全独立的copy一份数据,与原数据无关 深copy
如果一份数据(列表)第二层时,你想与原数据进行共用 浅copy
!!!

面试题 切片是深拷贝还是浅拷贝.

切片是浅拷贝第二层时共用的

l1 = [1,2,3[22,33]]l2 = l1[:]l1.append(66) print(l2)# [1, 2, 3, [22, 33]]l1[-2].append(666) print(l2)#[1, 2, 3, [22, 33, 666]]

查看python 源码

import copywith open(str(copy.__file__), "r") as f:    print(f.read())

转载于:https://www.cnblogs.com/yonghuierming/p/9507662.html

你可能感兴趣的文章
就是一个表格
查看>>
找回使用Eclipse删除的文件
查看>>
移动开发Html 5前端性能优化指南
查看>>
《系统架构师》——操作系统和硬件基础
查看>>
如何看待一本图书
查看>>
Linux 中如何通过命令行访问 Dropbox
查看>>
开发进度——4
查看>>
JS里验证信息
查看>>
Akka actor tell, ask 函数的实现
查看>>
windows10 chrome 调试 ios safari 方法
查看>>
Netty 4.1.35.Final 发布,经典开源 Java 网络服务框架
查看>>
详解Microsoft.AspNetCore.CookiePolicy
查看>>
SCDPM2012 R2实战一:基于SQL 2008 R2集群的SCDPM2012 R2的安装
查看>>
SQL SERVER中字段类型与C#数据类型的对应关系
查看>>
Linux lsof命令详解
查看>>
SVG path
查看>>
js判断checkbox是否选中
查看>>
多系统盘挂载
查看>>
MySQL函数怎么加锁_MYSQL 函数调用导致自动生成共享锁问题
查看>>
MR1和MR2的工作原理
查看>>