当前位置: 首页 > 编程日记 > 正文

Python基础三--字典,集合,编码,深浅copy,元祖、文件操作

字典 dict
数据类型划分:可变数据类型,不可变数据类型
不可变数据类型: 元组,bool值,int,str 可哈希
可变数据类型: list,dict,set 不可哈希

dict key :必须是不可变数据类型,可哈希,
value:任意数据类型。
dict 优点:二分查找法去查询
存储大量的关系型数据
特点:无序的

字典 dict的操作
    dic={'age': 18, 'name': 'jin', 'sex': 'male'}
#直接改变dic['height'] = 180 # 原来没有的键值对,无序添加dic['age'] = 32 #原来有键,值直接覆盖改变# setdefault()    dic.setdefault('height',180)# 没有才能添加成功dic.setdefault('name','john')#有则不改变任何dic.setdefault('hobbie')   # 'hobbie': None

# pop()
#删除存在的键值对dic.pop('age')# 成功print(dic.pop('age')) # 18 会返回删除的值
#删除不存在的,设置返回值提醒不存在dic.pop('height') #没有的键,删除会报错dic.pop('height',None)# 加上None 不会报错,返回noneprint(dic.pop('height','没有此件')) # 可设置返回值
#用于大量数据时删除不知道是否存在的值dic.pop('name',None) # 成功 {'age': 18, 'sex': 'male'}# popitem()print(dic.popitem())  # 随机删除 有返回值 返回 存在元组里面的 删除的键值。# deldel dic #删除字典del dic['name'] #删除键值对#clear()dic.clear() # 清空

 改

#直接赋值dic['age'] = 32 #原来有键,值直接覆盖改变#updatedic2 = {'sex':'female','weight':75}dic2.update(dic) # 改变dic2 把后面的覆盖和添加到前面

查   

在循环一个列表时,最好不要删除列表中的元素,这样会使索引发生改变,从而报错。

#
    print(dic.keys(),type(dic.keys()))#dict_keys(['age', 'sex', 'name']) <class 'dict_keys'>print(dic.values(),type(dic.values()))#dict_keys(['age', 'sex', 'name']) <class 'dict_keys'>print(dic.items(),type(dic.items()))#dict_items([('age', 18), ('name', 'jin'), ('sex', 'male')]) <class 'dict_items'>#循环去查for i in dic: # 仅返回键 同dic.keys()一样for i in dic.keys(): #返回键for i in dic.values():# 返回值print(i)
#Python:找一一对应的最小单位for i in dic.items():print(i)     # ('age', 18)('name', 'jin')('sex', 'male')for k,v in dic.items() :print(k,v)  # name jin    sex male    age 18#直接赋值去查v1 = dic['name']print(v1)v2 = dic['name1']  # 报错print(v2)

# get()
  print(dic.get('name1',"默认返回值") # 返回设定的返回值,默认返回none,防止报错

formkeys()   已知键,添加值。(可覆盖)

dic = dict.fromkeys([1,2,3],'春哥')
print(dic)   #{1: '春哥', 2: '春哥', 3: '春哥'}
dic = dict.fromkeys([1,2,3],[])
print(dic)   # {1: [], 2: [], 3: []}
dic[1].append('袁姐')
print(dic)   # {1: ['袁姐'], 2: ['袁姐'], 3: ['袁姐']}
dic[2].extend('二哥')
print(dic)   # {1: ['袁姐', '二', '哥'], 2: ['袁姐', '二', '哥'], 3: ['袁姐', '二', '哥']}

编码

1,各个编码之间的二进制,是不能互相识别的,会产生乱码。
2,文件的储存,传输,不能是unicode(只能是utf-8 utf-16 gbk,gb2312,asciid等)
asciiA : 00000010  8位 一个字节unicode     A : 00000000 00000001 00000010 00000100 32位  四个字节中:00000000 00000001 00000010 00000110 32位  四个字节utf-8       A :  00100000 8位 一个字节中:  00000001 00000010 00000110 24位 三个字节gbk         A : 00000110  8位 一个字节中 : 00000010 00000110 16位 两个字节
py3:str 在内存中是用unicode编码。bytes类型对于英文:str  :表现形式:s = 'alex'编码方式: 010101010  unicodebytes :表现形式:s = b'alex'编码方式: 000101010  utf-8 gbk。。。。对于中文:str  :表现形式:s = '中国'编码方式: 010101010  unicodebytes :表现形式:s = b'x\e91\e91\e01\e21\e31\e32'编码方式: 000101010  utf-8 gbk。。。。
    s1 = 'alex'
# encode 编码,如何将str --> bytes, ()s11 = s1.encode('utf-8')s11 = s1.encode('gbk')print(s11)s2 = '中国's22 = s2.encode('utf-8')s22 = s2.encode('gbk')print(s22)

中文一定要用什么编码就用什么解码,英文则不必。

    # str --->byte  encode 编码s = '二哥'b = s.encode('utf-8')print(b)#byte --->str decode 解码s1 = b.decode('utf-8')print(s1)

集合

集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:

  去重,把一个列表变成集合,就自动去重了。

  关系测试,测试两组数据之前的交集、差集、并集等关系。

集合的创建

    set1 = set({1,2,'barry'})set2 = {1,2,'barry'}print(set1,set2)  # {1, 2, 'barry'} {1, 2, 'barry'}

集合的操作

    set1 = {'alex','wusir','ritian','egon','barry'}set1.add('景女神')print(set1)#update:迭代着增加set1.update('A')print(set1)set1.update('老师')print(set1)set1.update([1,2,3])print(set1)
    set1 = {'alex','wusir','ritian','egon','barry'}set1.remove('alex')  # 删除一个元素print(set1)set1.pop()  # 随机删除一个元素print(set1)set1.clear()  # 清空集合print(set1)del set1  # 删除集合print(set1)
    for i in set1:print(i)

集合的其他操作

交集。(&  或者 intersection)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2)  # {4, 5}
print(set1.intersection(set2))  # {4, 5}
View Code

并集。(| 或者 union)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 7}print(set2.union(set1))  # {1, 2, 3, 4, 5, 6, 7}
View Code

差集。(- 或者 difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2)  # {1, 2, 3}
print(set1.difference(set2))  # {1, 2, 3}
View Code

反交集。 (^ 或者 symmetric_difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 ^ set2)  # {1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2))  # {1, 2, 3, 6, 7, 8}
View Code

子集与超集

set1 = {1,2,3}
set2 = {1,2,3,4,5,6}print(set1 < set2)
print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。print(set2 > set1)
print(set2.issuperset(set1))  # 这两个相同,都是说明set2是set1超集。
View Code

frozenset不可变集合,让集合变成不可变类型。

s = frozenset('barry')
print(s,type(s))  # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>
for i in s:
print(i)
# y
# r
# a
# b

深浅copy

1 赋值运算               对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

l1 = [1,2,3,['barry','alex']]
l2 = l1l1[0] = 111
print(l1)  # [111, 2, 3, ['barry', 'alex']]
print(l2)  # [111, 2, 3, ['barry', 'alex']]

l1[3][0] = 'wusir'
print(l1)  # [111, 2, 3, ['wusir', 'alex']]
print(l2)  # [111, 2, 3, ['wusir', 'alex']]
复制代码

2 浅拷贝copy

l1 = [1,2,3,['barry','alex']]l2 = l1.copy()
print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2380296895816
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2380296895048
l1[1] = 222
print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2593038941128
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2593038941896
 
l1[3][0] = 'wusir'
print(l1,id(l1[3]))  # [1, 2, 3, ['wusir', 'alex']] 1732315659016
print(l2,id(l2[3]))  # [1, 2, 3, ['wusir', 'alex']] 1732315659016
View Code

对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

3 深拷贝deepcopy

import copy
l1 = [1,2,3,['barry','alex']]
l2 = copy.deepcopy(l1)print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2915377167816
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2915377167048

l1[1] = 222
print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2915377167816
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2915377167048

l1[3][0] = 'wusir'
print(l1,id(l1[3]))  # [1, 222, 3, ['wusir', 'alex']] 2915377167240
print(l2,id(l2[3]))  # [1, 2, 3, ['barry', 'alex']] 2915377167304
View Code

对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变

4 文件操作

文件名.txt
1,文件路径:d:\文件名.txt
2,编码方式:utf-8 gbk 。。。。
3,操作方式:只读,只写,追加,读写,写读.....
以什么编码方式储存的文件,就以什么编码打开进行操作。
        rrbf = open('文件名',mode='r',encoding='utf-8')content = f.read()print(content,type(content))f.close()f = open('文件名',mode='rb',)content = f.read()print(content)f.close()r+ 读写r+b 读写(以bytes类型)f = open('log',mode='r+',encoding='utf-8')print(f.read())f.write('大猛,小孟')f.close()f = open('log',mode='r+b')print(f.read())f.write('大猛,小孟'.encode('utf-8'))f.close()
只读,读写
    f = open('log',mode='a',encoding='utf-8')f.write('佳琪')f.close()f = open('log',mode='ab')f.write('佳琪'.encode('utf-8'))f.close()
追加
    w     #对于w:没有此文件就会创建文件wb   # 先将源文件的内容全部清除,在写。
    先将源文件的内容全部清除,在写。f = open('log',mode='w',encoding='utf-8')f.write('附近看到类似纠纷')f.close()f = open('log',mode='wb')f.write('附近看到类似纠纷'.encode('utf-8'))f.close()w+f = open('log',mode='w+',encoding='utf-8')f.write('aaa')f.seek(0)print(f.read())f.close()w+b.......
只写、写读
f = open('log',mode='r+',encoding='utf-8')
content = f.read(3)  # 读出来的都是字符

f.seek(3)  # 是按照字节定光标的位置

f.tell() #告诉你光标的位置
print(f.tell())f.readable()  # 是否可读

f.truncate(4)# 再源文件上截取打印

line = f.readline()  # 一行一行的读

line = f.readlines()  # 每一行当成列表中的一个元素,添加到list中
for line in f:print(line)
功能详解 f.seek(0)    移动到最开始    f.seek(0,2)  移动到最末尾
# f = open('log',mode='a+',encoding='utf-8')
# f.write('佳琪')
# count = f.tell()
# f.seek(count-9)
# print(f.read(2))
# f.close()

转载于:https://www.cnblogs.com/olivia2018/p/8075403.html

相关文章:

springboot +security +mybatis+thymeleaf 实现简单的用户 角色 权限(资源) 管理

1、用户 角色 资源的关系 2、实现思路 3、参考资料 Spring Boot Security Redis 实现简单权限控制 将返回结果变成json 响应改客户端 在第六项 4、实现代码 https://github.com/huyande/springsecurity.git 5、其他问题记录 在使用springboot 2.1.X 版本 &#xff0…

在JS中最常看到切最容易迷惑的语法(转)

发现一篇JS中比较容易迷惑的语法的解释,挺有用的,转载下,与大家分享: js中大括号有四种语义作用语义1&#xff0c;组织复合语句,这是最常见的 Js代码 if( condition ) { //... }else { //... } for() { //... } if( condition ) {//... }else {//... } f…

三、类型设计规范

一、类型的逻辑分组从CLR的角度来看&#xff0c;只有两种类型&#xff1a;引用类型和值类型。但从框架设计来说&#xff0c;可以进行更细致的分类 1、引用类型&#xff0c;包括&#xff1a;类、静态类、集合、数组、异常、属性2、值类型&#xff0c;包括&#xff1a;枚举和结构…

使用mybatis一次性添加多条数据 在oracle 数据库上

1、sql 语句 #sql 语句 insert into STD_XXXX &#xff08;表名&#xff09; (ID,NAME,CLASSNAME ) select STD_XXX_SEQUENCE.Nextval,&#xff08;自增序列名称&#xff09; XXX.* from (select 1,3 from dual unionselect 2,3 from dual)XXX 2、mybatis #多条插入 &…

使用SharpPCap在C#下进行网络抓包

转自http://www.cnblogs.com/billmo/archive/2008/11/09/1329972.html 在做大学最后的毕业设计了,无线局域网络远程安全监控策略那么抓包是这个系统设计的基础以前一直都是知道用winpcap的,现在网上搜了一下,有用C#封装好了的,很好用下面是其中的几个用法这个类库作者的主页:ht…

Spring Security的RBAC数据模型嵌入

1.简介 ​ 基于角色的权限访问控制&#xff08;Role-Based Access Control&#xff09;作为传统访问控制&#xff08;自主访问&#xff0c;强制访问&#xff09;的有前景的代替受到广泛的关注。在RBAC中&#xff0c;权限与角色相关联&#xff0c;用户通过成为适当角色的成员而得…

实用Jquery开发自己的插件

实用Jquery开发自己的插件 jQuery.fn.extend(object); jQuery.extend(object); jQuery.extend(object); 为扩展jQuery类本身.为类添加新的方法。 jQuery.fn.extend(object);给jQuery对象添加方法。 fn 是什么东西呢。查看jQuery代码&#xff0c;就不难发现。 jQuery.fn jQuery…

无线网中的一些技术名词和解释

现在大家到处都可以听到在说WLAN&#xff0c;到底 个WLAN是什么意思呢&#xff1f;WLAN&#xff1a;Wireless Local Area Network的缩写&#xff0c;也是无线局域网的意思。AP&#xff1a;Access Point,无线接入器&#xff0c;常常缩写为AP。SSID&#xff1a;也缩写国ESSID&…

说到心里的哲理个性签名 学生时代的恋爱无非就是陪伴二字

学生时代的恋爱无非就是陪伴二字 也许因为得不到所以空想总是美好 . 让一个男人哭了 没错你赢了 但是你玩大了 曾经我们都那样嚣张后来怎么也学会了退让. 爱一个人成为习惯就会失去放手的勇敢. 有时沉默并不是因为词穷而是因为心空. 前任也曾是对的人 别打听我我没故事可说. 你…

切换用户启动程序

#!/bin/bash su - elasticsearch <<EOF /opt/elasticsearch-6.6.2/bin/elasticsearch -d exit EOF转载于:https://www.cnblogs.com/divl/p/10826803.html

即将到来的日子 ,你会寂寞吗?

见到如此的数字&#xff0c;不知道身边的你是否会想起一些往事&#xff0c;我想这一刻很难去形容&#xff0c;因为哥也会有寂寞的一天。 从来不太喜欢的节日&#xff0c;但是每逢到来的时候&#xff0c;总会有一阵阵的痛。今天不是好的节日&#xff0c;在地球上某一个角落&…

Mybatis 获取当前序列和下一个序列值 以及在一个方法中写多条SQL 语句

目录 1、Mybatis 获取当前序列和下一个序列值 2、Mybatis 在一个方法中写多条SQL 语句 1、Mybatis 获取当前序列和下一个序列值 #获取当前序列值 select XXX_sequence.currval from dual#获取下一个序列值 select XXX_sequence.Nextval from dual2、Mybatis 在一个方法中写多条…

MikuMikuDance 6 菜单汉化补丁

MikuMikuDance是日本人樋口优所开发&#xff0c; 将VOCALOID2的初音未来等角色制作3D模组的免费软件。 简称为MMD。 汉化过程中 有同学反映 原来4.0 完全汉化版会出错 而不得不用回原版故这次 汉化仅汉化菜单部分 理论上不会出错如果是日文模式请选择ヘルプ(&H)-&…

收缩临时库 shrink tempdb

tempdb实际占用空间40mb,文件大小70G, 原始大小2GB 无法使用dbcc shrinkfile进行收缩. 看到的解决方案是 重启数据库DBCC FREESYSTEMCACHE (ALL) ,然后再收缩.http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/7b45f0de-2aa3-4de0-930b-d9d0fe931b3a http…

H5如何测试?

它跟安卓APP与IOS APP有什么样的区别呢&#xff1f;★ 我们以往的APP是使用原生系统内核的&#xff0c;相当于直接在系统上操作&#xff0c;是我们传统意义上的软件&#xff0c;更加稳定★ H5的APP先得调用系统的浏览器内核&#xff0c;相当于是在网页中进行操作&#xff0c;较…

二维数组练习--矩阵的加法和乘法

数组的练习示例展示&#xff1a; package arrayList; /*** 矩阵的集中运算法则&#xff1a;求和&#xff0c;求积&#xff0c;求逆矩阵&#xff0c;转置矩阵......* author Drew**/ public class Arrays {/*** 两个二维数组&#xff08;矩阵&#xff09;求和。* param a 矩阵&a…

文件分享微信小程序的设计与开发 Java开发微信小程序 毕业设计

目录 使用的技术 2、功能介绍 3、此小程序未部署 所以体验不了 4、如何联系我或需要源码进行联系 使用的技术 SpringbootMybatisMysql 微信小程序Mpvue 1、小程序展示 后台管理 2、功能介绍 用户第一次使用小程序 用户授权上传视频和图片设置密码和有效期分享给微信好友…

Silverlight 3发布新版3.0.50106.0

微软1月19日发布Silverlight 3新版本3.0.50106.0.该版本主要修复以下几个问题&#xff1a;问题一&#xff1a; 当使用图形硬件加速功能&#xff08;GPU&#xff09;的时候&#xff0c;如果GPU驱动报错&#xff0c;Silverlight 3应用将不再正确显示内容。该问题是因为Silverligh…

递归该怎么写(二)

对于简单的递归&#xff08;可以写出数学表达式的递归&#xff09;&#xff0c;我们已经熟练掌握&#xff0c;但是对于有些递归我们有时候无从下手。这时候我们需要将抽象的问题数学化&#xff0c;或者能表达出来。 &#xff08;本节需要掌握&#xff1a; 熟悉递归函数的返回是…

chrome 浏览器打开静态html 获取json文件失败 解决方法

如图加&#xff1a; --allow-file-access-from-files

个人站立会议6

昨天做&#xff1a; 软件的出租功能部分 遇到问题&#xff1a; jsp 与数据库的连接 解决方法&#xff1a;查找资料&#xff0c;向他人请教。 今天做&#xff1a; 软件的出租功能部分。转载于:https://www.cnblogs.com/luohaochi/p/8092589.html

IIS配置跨服务器迁移

这几天&#xff0c;因为服务器要重装&#xff0c;要将此服务器的IIS网站搬到别一台服务器&#xff0c;因运行在此服务器上的站点有200多&#xff0c;不可能手动去重新设置&#xff0c;在网上找了一些迁移的工具&#xff0c;效果不理想&#xff0c;仔细研究IIS后&#xff0c;终天…

Express4.x API (四):Router (译)

Express4.x API 译文 系列文章 Express4.x API (一)&#xff1a;application (译) -- 完成Express4.x API (二)&#xff1a;request (译) -- 完成Express4.x API (三)&#xff1a;Response (译) -- 完成Express4.x API (四)&#xff1a;router (译) -- 完成已经完成了Express4.…

JavaScript(转载)

正则表达式用于字符串处理&#xff0c;表单验证等场合&#xff0c;实用高效&#xff0c;但用到时总是不太把握&#xff0c;以致往往要上网查一番。我将一些常用的表达式收藏在这里&#xff0c;作备忘之用。 匹配中文字符的正则表达式&#xff1a; [\u4e00-\u9fa5]匹配双字节字符…

复杂JSON参数传递后台处理方式

如图 或者使用 requestBoby 注解

shift()函数

用于对dataframe中的数整体上移或下移&#xff0c; 当为正数时&#xff0c;向下移。 当为负数时&#xff0c;向上移。 缺少的会填充NaN 参考&#xff1a; https://blog.csdn.net/kizgel/article/details/78333833 转载于:https://www.cnblogs.com/xxswkl/p/10831152.html

linux系统管理学习笔记之三----软件的安装

linux系统管理学习笔记之三----软件的安装 2009-12-29 19:10:02标签&#xff1a;linux 系统管理    [推送到技术圈] 版权声明&#xff1a;原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。htt…

Vue+element UI实现“回到顶部”按钮组件

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/caomage/article/details/85006973 背景 开发框架是vuewebpackelement-ui&#xff0c;需要一个回到顶部的通用组件。 开发 HTML部分 code&#xff1a; <template><t…

根据xml 文件生成 xsd文件 以及相关测试方法

1、下载trang.jar 下载地址&#xff1a; http://www.java2s.com/Code/Jar/t/Downloadtrang20091111jar.htm 2、用法介绍 将trang.jar 包 和xml 文件放到同一个目录下 执行以下命令 java -jar trang.jar a.xml a.xsd 3、测试类 public class CheckXML {public static voi…

十一运夺金基础数据采集工具

点击下载 转载于:https://www.cnblogs.com/JiangHuakey/archive/2010/11/17/1880139.html