Day2 - Python基础2 列表、字符串、字典、集合、文件、字符编码
本节内容
- 列表、元组操作
- 数字操作
- 字符串操作
- 字典操作
- 集合操作
- 文件操作
- 字符编码与转码
1. 列表、元组操作
列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作
定义列表:
names1 = ['Alex',"Tenglan",'Eric']
names2 = list(['Alex',"Tenglan",'Eric'])
判断是不是列表:
>>> type(names) is list
True
对列表的操作
通过下标访问列表中的元素,下标从0开始计数
>>> names[0]
'Alex'
>>> names[2]
'Eric'
>>> names[-1]
'Eric'
>>> names[-2] #还可以倒着取
'Tenglan'
切片:取多个元素
>>> name
['yhy', 'cfp', 'lk']
>>> name[:]
['cfp', 'lk'] ##从索引1的位置切片到最后面
>>> name[:] ##从索引0到索引1的位置
['yhy']
>>> name[::] ##从索引0到最后 步进为1
['yhy', 'cfp', 'lk']
>>> >>> name2 = name [:]
>>> id(name) >>> id(name2) >>>
###切片后的列表是一个新的列表
追加
>>> name.append('zs')
>>> name
['yhy', 'cfp', 'lk', 'zs']
插入
##指定索引位置,进行插入
>>> name.insert(,'yhy1')
>>> name
['yhy1', 'yhy', 'cfp', 'lk', 'zs']
>>>
修改
##索引进行重新赋值操作就是修改
>>> name[] = 'yhy2'
>>> name
['yhy2', 'yhy', 'cfp', 'lk', 'zs']
删除
##指定索引删除
>>> del name[]
>>> name
['yhy', 'cfp', 'lk', 'zs'] ###指定元素删除
>>> name.remove('zs')
>>> name
['yhy', 'cfp', 'lk'] ###pop 删除最后一个元素,并且返回删除的元素
>>> name.pop()
'lk'
>>> name
['yhy', 'cfp']
>>>
清空
>>> name
['yhy', 'cfp', , , ]
>>> name.clear()
>>> name
[]
扩展
####extend 指定一个列表进行扩展
>>> name
['yhy', 'cfp']
>>> l1 = [,,]
>>> name
['yhy', 'cfp']
>>> name.extend(l1)
>>> name
['yhy', 'cfp', , , ]
>>>
拷贝
####进行赋值操作就可以
>>> name
['yhy', 'cfp', , , ]
>>> name1 = name
>>> name1
['yhy', 'cfp', , , ] ####调用列表的方法进行复制
>>> name2= name.copy()
>>> name2
['yhy', 'cfp', , , ]
>>>
copy真的这么简单么?那我还讲个屁!!。。。
统计
###统计name里面元素1的个数是多少
>>> name
['yhy', 'cfp', , , ]
>>> name.count()
排序&翻转
>>> num = [,,,,]
>>> num.sort()
>>> num
[, , , , ]
>>> num.reverse()
>>> num
[, , , , ]
>>>
获取下标
###index获取指定元素的下标
>>> num
[, , , , ]
>>> num.index()
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
语法
names = ("alex","jack","eric")
它只有2个方法,一个是count,一个是index,完毕。
2.数字
int 有长整形和短整形
python3中统一为int
python2中有区分 基本的加减乘除这边就不写出来了
### 将 a 转为整形,而a的base=16 代表了,a是16进制
>>> a = 'b'
>>> int(a,base=16)
11
>>> >>> r = 4
>>> bin(4) ###将4变成2进行
'0b100'
>>> r.bit_length() ##当前数字的二进制,至少用n位表示
3
>>>
3. 字符串操作
创建字符串:
1 >>> name1 = 'crik' ###创建字符串单引号和双引号没区别
2 >>> type(name1) 注意:三个单引号和三个双引号 也可以表示字符串,且可以是多行
3 <class 'str'>
4 >>> name2 = 'yhy'
5 >>> type(name2)
6 <class 'str'>
对字符串的操作:
重复输出:
>>> print('h'*3)
hhh 通过索引获取字符串字符,和切片一样
>>> name1
'crik'
>>> name1[1]
'r' 关键字 in
>>> name1
'crik'
>>> 'c' in name1
True
>>> 格式化输出
>>> name1
'crik'
>>> print("%s is good teacher."%name1)
crik is good teacher.
注意:%s是字符串 %d 是数字 %f是浮点数 字符串拼接:
>>> name1
'crik'
>>> msg = "is teacher"
>>> name1 + msg
'crikis teacher' 这样的方式效率非常的低。
最好的方式采用join的方法 重要!!!join是把一个可迭代对象变成了字符串
>>> ''.join([name1,msg])
'crikis teacher'
str = "src.plugins.ss"
a = str.rsplit(".",maxsplit=) ##从右边切割,且就切割一次
print(a)
###['src.plugins', 'ss']
字符串的内置方法:特别的多 差不多20个吧:
4. 字典操作
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
创建的方式:{ },用逗号分隔一组键值对
键必须是唯一的,所以他一定是不可变类型:
- 不可变类型:整型,字符串,元组
- 可变类型:列表,字典
值可以是任意的类型:
语法:
info = {
'stu1101': "TengLan Wu",
'stu1102': "LongZe Luola",
'stu1103': "XiaoZe Maliya",
}
字典的特性:
- dict是无序的
- key必须是唯一的,so 天生去重
增加:
删除:
修改:
查:
创建初始化字典:
#通过一个列表生成默认dict,有个没办法解释的坑,少用吧这
>>> info = dict.fromkeys(['s1','s2','s3'],'test')
>>> info
{'s3': 'test', 's2': 'test', 's1': 'test'}
>>>
多级字典嵌套及操作
字典的sorted方法:返回一个有序字典所有key的列表:
1 >>> info
2 {'s3': 'test', 's2': 'test', 's1'
3 >>> info.keys()
4 dict_keys(['s3', 's2', 's1'])
5 >>> sorted(info.keys())
6 ['s1', 's2', 's3']
字典的遍历:很重要!!!!
d={'name':'alex','age':40,'hobby':'girl'}
for i in d:
print(i) d={'name':'alex','age':40,'hobby':'girl'}
for i in d:
print(i,d[i]) 默认推荐第一种方式:效率高
for i,v in d.items(): 第二种有一个转换的过程
print(i,v)
5.集合操作
回顾:
创建列表的时候有两种,元组也是两种,而集合只有一种就是set方法
列表:1:[] 2:list(序列) 序列:就是有索引的;如:字符串,列表,元组
元组:1:() 2:tumple(序列) 集合: set(可哈希对象) 可哈希对象可以理解成 如:列表,字符串 ,元组
注意1:虽然是由可哈希对象组成的集合,但是集合本身是不可哈希的
注意2:字典的键对象可以是( 整型 ,字符串 ,元组) 不可改变的对象:
集合是一个无序的,不重复的数据组合,它的主要作用如下:
1:去重,把一个列表变成集合,就自动去重了
2:关系测试,测试两组数据之前的交集、差集、并集等关系
常用关系操作:
1 并集:
2 s1=set([1,2,3,4])
3 s2=set((4,5,6,7))
4 print(s1.union(s2))
5 print(s1 | s2)
6
7 交集:
8 s1=set([1,2,3,4])
9 s2=set((4,5,6,7))
10 print(s1.intersection(s2))
11 print(s1 & s2 )
12
13 差集: 只在s1中的元数
14 s1=set([1,2,3,4])
15 s2=set((4,5,6,7))
16 print(s1.difference(s2))
17 print(s1 - s2 )
18
19 对称差集:(项在t或s中,但不会同时出现在二者中)
20 s1=set([1,2,3,4])
21 s2=set((4,5,6,7))
22 print(s1.symmetric_difference(s2)) #{1, 2, 3, 5, 6, 7}
23 print(s1 ^ s2 ) #{1, 2, 3, 5, 6, 7}
24
25 超级;子集
26 s1=set([1,2,3,4])
27 s2=set((4,2,3))
28 print(s1.issuperset(s2)) #True s1 > s2 判断s1是不是s2的超级
29 print(s1.issubset(s2) ) # True s1 < s2 判断s1是不是s2的子集
基本操作:
基本操作: t.add('x') # 添加一项 s.update([,,]) # 在s中添加多项 使用remove()可以删除一项: t.remove('H') len(s)
set 的长度
增删
不可变集合:跟列表与元组的关系差不多
1 s=set('charr')
2 s1=frozenset('charr')
3 print(s)
4 print(s1)
5
6 {'c', 'h', 'a', 'r'}
8 frozenset({'c', 'h', 'a', 'r'})
6. 文件操作
对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
打开文件的模式有:
r 只读不能写
w 删除再写不能读
a 追加不能读 r+ 从头开始w 光标写的字最后
w+ 先删除再写 光标在最后
a+ 追加写,光标在最后
还有rb 和 wb 的模式:
那么b代表什么? rb指的就是以字节读取,wb以字节写入. 我们知道在传送文件的时候,默认在硬盘保存的是字节,而我们要是以unicode去传输,还需要
进行decode下才可以;等到传送文件成功的时候,对方又需要将unicode进行decode放到硬盘中去
这样的话。速度就单纯的比用字节传输慢的多多了,多个道decode 和 encode的工序。 所以默认进行网络传输的时候必须为字节码。存到硬盘的数据也必须是字节。
这就是字节存在的意义,除此之外,字节毛无意义。 知识点:将unicode转成字节的方式:1: 内置的bytes函数 2:字符串自身的encode方法 >>> name = '搜索'
>>> bytes(name)
>>> bytes(name,'utf8') ###指定要解码的对象,和解码方式
b'\xe6\x90\x9c\xe7\xb4\xa2'
>>> name.encode('utf8')
b'\xe6\x90\x9c\xe7\xb4\xa2'
>>>
基本操作
截断truncate,你加参数就是截断全部
1 注意:的是truncate要需要写的权限:
2 >>> f= open('111.txt','r+',encoding='utf-8')
3 >>> s = f.truncate(2) ###整个文件就只保存头两个的字符
4 >>> f.read()
5 'ne'
6 >>>
其他的一些操作:
1 isatty()判断是否是终端
2 readable()判断是否可读
with语句:
就是专门对应那些会打开文件不会关闭文件的家伙。。。。。
1 正常文件对象:
2 f=open(‘log’,’r’)
3 f.read()
4 f.close()
5
6 with open(‘log’,’r’) as f: ### 这是与f=open(‘log’,’r’)相等的
7 f.read()
8
9
10 也可以拿到多个的句柄:
11 with open(‘log’,’r’) as f_read, open(‘log2’,’w’) as f_write:
12 pass
7. 字符编码与转码
字符编码:
机器只能识别二进制:
后来老美就发明了:ASCII码
- ASCII :只能存英文和拉丁字符;一个字符占1个字节,8位。
ASCII码一个字节可以存256个字符,但是没有都存满,这时候中国也想使用计算机啊,但是ASCII码不可以存中文,这时候中国就利用了ASCII码的最后几个字符中的一个去映射到一个更加大的字符集:
- gb2312:只能6700多个中文1980年
- gbk1.0:存了2万多个中文1995年
- gb18030:存了2万7千多个中文 2000年
但是呢,每个国家都要用计算机啊,但是ASCII码的映射方式也就那么剩下的几个,这时候问题就来了,那剩下的几个空字符给谁用?这时候老美的iso组织就出来了发明了一种万国码:Unicode
Unicode是一个标准:
- 早期的Unicode版本是utf-32:一个字符占4个字节;太浪费了
- 中期的Unicode版本是utf-16:一个字符占2个字节或2个字节以上,实在找不到就去utf-32去找,utf-16可以存65536个字符
有一个共性utf-32和utf-16是将各国的编码append的形式的,位置是不变的,such as 是可以兼容GBK的
- 后期的Unicode版本是utf-8:一个英文字符占1个字节,一个中文占3个字节
utf-8:采用了新的字符存放方式。位置变了
虽然有这个标准,大家就可以都使用这个了;但是中国奇葩说你就必须使用gb18030【当然每个国家都有自己的要求比如说:日本就必须要求支持JPK什么的】
(就如微软的系统在中国默认支持的gbk而不是utf-8)
注:可以在cmd 命令右键属性查看;可以采用 chcp 修改
2:在python的字符集
需知:
1 1.在python2默认编码是ASCII, python3里默认是unicode
2 2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本,
3 不过在文件里存的还是utf-8,因为utf8省空间
4 3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string
in python2
默认是 ASCII码
in python3
默认是Unicode 【所以基本就不用做任何的转码】
【但是你非要没事干,要把Unicode转成GBK的话】
在encode的同时,会把数据转成了bytes类型
bytes是单独的数据类型:可以理解成[0-255]之间的纯数字类型
b=byte =字节类型
实验环境:
- Windows的 cmd GKB格式:
- 文件:111.txt
- 编译器 python3
1 111.txt文件:
2
3 s = "你是我的神奇"
4 print(s)
5 s_to_gbk = s.encode('gbk')
6 print(s_to_gbk)
7 s_to_unicode = s_to_gbk.decode('gbk')
8 print(s_to_unicode)
9
10 D:\>python3 111.txt
11 你是我的神奇
12 b'\xc4\xe3\xca\xc7\xce\xd2\xb5\xc4\xc9\xf1\xc6\xe6'
13 你是我的神奇
实验环境:
- Windows的 cmd GKB格式:
- 文件:字符编码python2.py
- 编译器 python2
1 文件:
2
3 s=’特斯拉’
4
5 print(s)
执行:
错误:说 在这个文件中没有ASCII码的字符串且也没有定义采用的编码
修改:
文件:
执行:
解析:可以看到可以正确执行,但是是乱码,这是因为什么呢?
文件只是定义了文件的格式是utf-8,但是呢 cmd还是采用gbk的格式所以我们要修改cmd的编码 为utf-8
Day2 - Python基础2 列表、字符串、字典、集合、文件、字符编码的更多相关文章
- Day2 - Python基础2 列表、字典、集合
Python之路,Day2 - Python基础2 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一, ...
- python3笔记十八:python列表元组字典集合文件操作
一:学习内容 列表元组字典集合文件操作 二:列表元组字典集合文件操作 代码: import pickle #数据持久性模块 #封装的方法def OptionData(data,path): # ...
- Python基础2 列表 元祖 字符串 字典 集合 文件操作 -DAY2
本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...
- python的学习笔记01_4基础数据类型列表 元组 字典 集合 其他其他(for,enumerate,range)
列表 定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素 特性: 1.可存放多个值 2.可修改指定索引位置对应的值,可变 3.按照从左到右的顺序定义列表元素,下标从0开始顺序访问 ...
- Python入门基础学习(列表/元组/字典/集合)
Python基础学习笔记(二) 列表list---[ ](打了激素的数组,可以放入混合类型) list1 = [1,2,'请多指教',0.5] 公共的功能: len(list1) #/获取元素 lis ...
- python基础之列表、字典、元祖等 (二)
一.作用域 if 1==1: name = 'weibinf' print name 下面的结论对吗? 外层变量,可以被内层变量使用 内层变量,无法被外层变量使用 二.三元运算 result = 值1 ...
- Python之路,Day2 - Python基础,列表,循环
1.列表练习name0 = 'wuchao'name1 = 'jinxin'name2 = 'xiaohu'name3 = 'sanpang'name4 = 'ligang' names = &quo ...
- [转载]Python 元组、列表、字典、文件
python的元组.列表.字典数据类型是很python(there python is a adjective)的数据结构.这些结构都是经过足够优化后的,所以如果使用好的话,在某些area会有很大的益 ...
- python基础之Day7part2 史上最清晰字符编码理解
二.字符编码 基础知识: 文本编辑器存取文件原理与py执行原理异同: 存/写:进入文本编辑器 写内容 保存后 内存数据刷到硬盘 取/读:进入文本编辑器 找到内容 从硬盘读到内存 notepad把文件内 ...
随机推荐
- (转)利用Auto ARIMA构建高性能时间序列模型(附Python和R代码)
转自: 原文标题:Build High Performance Time Series Models using Auto ARIMA in Python and R 作者:AISHWARYA SI ...
- Flask 模板语言,装饰器
Jinja2模板语言 # -*- coding: utf-8 -*- from flask import Flask, render_template, request, redirect, ...
- 设计模式之观察者模式C#实现
说明:主要参考<Head First设计模式(中文版)>,使用C#代码实现. 代码:Github 1.观察者模式UML图 2.气象监测类图 3.气象监测代码(书中C#版) 3.1 Obse ...
- 易优CMS:switch的基础用法
[基础用法] 名称:switch 功能:简单条件判断,比if判断标签少些不等于相同功能,视个人习惯而用. 语法: {eyou:switch name='$eyou.field.has_children ...
- JS---DOM---为元素绑定事件的引入,为元素绑定多个代码,兼容代码
1. 为元素绑定事件的引入: 用src直接绑定多个,只实现最后一个(programmer2.js) <input type="button" value="按钮&q ...
- s3c2440裸机-代码重定位(2.编程实现代码重定位)
代码重定位(2.编程实现代码重定位) 1.引入链接脚本 我们上一节讲述了为什么要重定位代码,那么怎么去重定位代码呢? 上一节我们发现"arm-linux-ld -Ttext 0 -Tdata ...
- Lua 5.1 学习笔记
1 简介 2 语法 2.1 语法约定 2.1.1 保留关键字 2.1.2 操作符 2.1.3 字符串定义 2.2 值与类型 2.2.1 强制转换 2.3 变量 2.3.1 索引 2.3.2 环境表 2 ...
- ccf-csp201809题解
目录 ccf-csp201809题解 1. 201809-1 卖菜 题目描述 解析 通过代码 2. 201809-2 买菜 题目描述 解析 通过代码 3.201809-3 元素选择器 题目描述 解析 ...
- vue-cli2和cli3的使用和区别
vue-cli脚手架的使用 使用vue-cli可以快速搭建vue的开发环境,和webpack的配置 安装vue脚手架: npm install -g@vue/cli 上面安装的是vue cli3的版本 ...
- RabbitMQ的高级特性概念理解
1.RabbitMQ中的消息如何保障百分之百的投递成功? 答:百分之百的投递成功,方案可以参考下面的2.3. 2.什么是生产者端的可靠性投递? 答:第一步,生产者保障消息的成功发出.第二步,保障Rab ...