Python之路-python(set集合、文本操作、字符编码 )

一、集合操作(set)                                                                                                                                                                                        

    1、定义:

set集合,是一个无序且不重复的元素集合。

集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。集合支持用in和not in操作符检查成员,由len()内建函数得到集合的基数(大小), 用 for 循环迭代集合         的成员。但是因为集合本身是无序的,不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值。

 2、特性:

1、无序

2、去重

3、关系测试

 3、常用操作:

      交集(&)(intersection):两者都存在的

      

1 >>>a = [1,2,3,4,5]
2 >>>b = [4,5,6,7,8]
3 >>>a_set = set(a)
4 >>>b_set = set(b)
5 >>>rint(a_set.intersection(b_set))
6 >>>print(a_set.intersection(b_set),type(a_set.intersection(b_set)))
7 >>>{4, 5} <class ‘set‘>#可以看出字典和集合都是{},先将a和b都转成集合,然后求出交集(它们两都有的)

并集(|)(union):去重后所有元素放一起

1 >>>a = [1,2,3,4,5]
2 >>>b = [4,5,6,7,8]
3 >>>a_set = set(a)
4 >>>b_set = set(b)
5 >>>print(a_set.union(b_set))

差集(-)(difference):语法使用规则是你有我没有

1 >>>a = [1,2,3,4,5]
2 >>>b = [4,5,6,7,8]
3 >>>a_set = set(a)
4 >>>b_set = set(b)
5 >>>print(a_set.difference(b_set))#(前后存在顺序问题,a里面有的b里面没有的(有---没有))
6 >>>print(b_set.difference(a_set))#b里面有的a里面没有

子集(issubset):a是不是b的子集和b是不是a的子集

1 >>>a = [1,2,3,4,5]
2 >>>b = [4,5,6,7,8]
3 >>>a_set = set(a)
4 >>>b_set = set(b)
5 >>>print(a_set.issubset(b_set))
6 >>>print(b_set.issubset(a_set))
7 >>>False
8 >>>False

父集(issuperset):a是不是b的父集和b是不是a的子集

1 >>>a = [1,2,3,4,5]
2 >>>b = [4,5,6,7,8]
3 >>>a_set = set(a)
4 >>>b_set = set(b)
5 >>>print(a_set.issuperset(b_set))
6 >>>print(b_set.issuperset(a_set))
7 >>>False
8 >>>False

对称差集(^)(symmetric_difference):a和b都互相都没有(去重后放到一起)

1 >>>a = [1,2,3,4,5]
2 >>>b = [4,5,6,7,8]
3 >>>a_set = set(a)
4 >>>b_set = set(b)
5 >>>print(a_set.symmetric_difference(b_set))
6 >>>{1, 2, 3, 6, 7, 8}

4、基本操作

.add(增加)添加一项

1 >>>a = [1,2,3,4,5]
2 >>>a_set = set(a)
3 >>>print(a_set)
4 >>>a_set.add(55)#一次只能添加一个元素,否则会报错
5 >>>print(a_set)

.update([增加多项])

1 >>>a = [1,2,3,4,5]
2 >>>a_set = set(a)
3 >>>print(a_set)
4 >>>a_set.update(‘88‘,‘lei‘,‘lei‘)
5 >>>print(a_set,type(a_set))
6 >>>{1, 2, 3, 4, 5}
7 >>>{1, 2, 3, 4, 5, ‘8‘, ‘e‘, ‘l‘, ‘i‘} <class ‘set‘>#通过结果不难看出集合天然去重

.remove(‘删除‘)(没有的话报错)

1 >>>a = [1,2,3,4,5]
2 >>>a_set = set(a)
3 >>>print(a_set)
4 >>>a_set.remove(1)#一次只能删除一个,否则会报错
5 >>>print(a_set,type(a_set))

.copy(复制)

>>>a = [1,2,3,4,5]
>>>a_set = set(a)
>>>b_set = a_set.copy()
>>>print(a_set,type(a_set))
>>>print(b_set,type(b_set))
>>>{1, 2, 3, 4, 5} <class ‘set‘>
>>>{1, 2, 3, 4, 5} <class ‘set‘>

.pop(删除任意一个并返回这个元素)

1 >>>a = [1,2,3,4,5]
2 >>>a_set = set(a)
3 >>>b_set = a_set.pop()#随机删除,并返回删除的元素
4 >>>print(a_set,type(a_set))
5 >>>print(b_set)
6 >>>{2, 3, 4, 5} <class ‘set‘>
7 >>>1

.discard(删除)(没有不会报错)

1 >>>a = [1,2,3,4,5]
2 >>>a_set = set(a)
3 >>>b_set = a_set.discard(5)
4 >>>print(a_set)
5 >>>print(b_set)
6 >>>{1, 2, 3, 4}
7 >>>None#有的话删除后并返回一个None
8 >>>就算没有,不报错,也只会返回一个None

二、文件操作                                                                                                                                                                                                   

       提示:2.7里面的file文件操作3.x没有

      1、标准操作:

f = open("yesterday",‘w‘,encoding="utf-8")#文件句柄(放到了内存什么位置)
f.write("哈哈哈")#写入内容,如果没有该文件就自动创建
f.close#(关闭文件)

2、建议操作:

>>>with open("yesterday","w",encoding=‘utf-8‘) as data:#读写完后自动关闭,因为windows上默认的编码是gbk,所以需要转换成utf-8
       data.write("哈哈哈")

      3、打开模式:

r,只读模式(默认)。
w,只写模式。(不可读;不存在就自动创建;存在则删除内容)
a,追加模式。(可读;   不存在则创建;存在则只追加内容)
"+" 表示可以同时读写某个文件

r+,可读写文件。【可读;可写;可追加】
w+,写读
a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

rU
r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

.readlines(读成一个列表,所有内容)#默认每行之间有空行因为有\n,用strip()就行
  .readline(默认一次只读一行)
  .seek#位置0是开始
  .tell#打印当前位置
  .encoding#当前编码
  .readable#文件是否可读
  .writeable#是否可写
  .flush#默认是等内存缓存满了才写入,强刷读一条直接写入硬盘

小练习

1 #!/usr/bin/env python
2 #—*—coding:utf-8—*—
3 with open("yesterday","r",encoding=‘utf-8‘) as data_1 , 4     open("yesterdaybak","w",encoding=‘utf-8‘) as data_2:#读写完后自动关闭
5     for line in data_1.readlines():
6         if "中国石油" in line:
7             line = line.replace("中国石油","中国石化")
8         data_2.write(line)
yesterday#文件更改前
新浪
百度
中国石油

yesterdaybak#更改后文件内容
新浪
百度
中国石化

三、字符编码与转码                                                                                                                                                                                           

1、python3练习

打开文件yesterday(windows上),内容如下
新浪
百度
中国石油
>>>with open("yesterday","r") as data:
>>>    for line in data:
>>>        line = line.strip(‘\n‘)
>>>        print(line)
报错:
UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xad in position 18: illegal multibyte sequence
解释:
      我们知道utf-8是unicode的扩展,windows上默认编码是gbk,按照上图所示打开文件的时候我们需要将gbk转码直接解码(encoding)成utf-8。
      如果是python2,.x的话,如果编码格式是gbk,我们首先需要将gbk转码成unicode,然后再将unicode解码(encoding)成utf-8。

四、函数                                                                                                                                                                                                          

1、定义:

        函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

2、特性:

        1、减少重复性

        2、是程序扩展性好

3、使程序更容易维护

3、语法:

1 >>>def func():
2 >>>    print("你好中国!")
3 >>>func()

4、执行顺序:

>>>def func():#1>>#3(首先python程序通过关键字发现这是个函数)(当执行完func()时候又到了这里)
>>>    print("你好中国!")#4(最后才执行到这里)
>>>func()#2(然后从上往下,这里执行了上面的函数)

5、函数参数

1 #默认参数
2 def func(x,y):#这里的x和y只是形参(形式参数)
3     print(x)
4     print(y)
5 func(1,2)#这里是实参(实际参数,就是真真切切要往函数体里面传的参数)
6 #1对应x,2对应y,也就是说实参合形参是平行对应的,否则打印出的效果就相反了。形参和实参不能多也不能少,否则报错。
1 #关键参数
2 def func(x,y,z):
3     print(x)
4     print(y)
5     print(z)
6 func(x= "中国",y="北京",z = "海淀")
7 #这样的话就没有了顺序的问题,只是要求形参和实参一定要对应,不能多,也不能少
时间: 2024-10-04 21:40:24

Python之路-python(set集合、文本操作、字符编码 )的相关文章

Python——day3_基础1_集合,文件操作,字符编码与转码

集合 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = set([3,5,9,10]) #创建一个数值集合 t = set("Hello") #创建一个唯一字符的集合 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时

python学习列表字符串字典集合文件操作字符串编码与转换

一.列表 1 names = "ZhangYang GuYun XiangPeng XuLiangchen" 2 names = ["ZhangYang", "GuYun", "XiangPeng", "ChengRongHua","XuLiangchen"] 3 names.append("LeiHaiDong") #在列表最后追加一个元素 4 names.inse

Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") return test1 res = test() print(res) 输出结果 test <function test1 at 0x021F5C90> 分析:这里print(res)输出的是te

Python之路Python内置函数、zip()、max()、min()

Python之路Python内置函数.zip().max().min() 一.python内置函数 abs() 求绝对值 例子 print(abs(-2)) all() 把序列中每一个元素做布尔运算,如果全部都是true,就返回true, 但是如果是空字符串.空列表也返回true 例子 print(all([1,2,'1',''])) 输出结果 False 例子2 print(all('')) 输出结果 True any() 把序列中每一个元素做布尔运算,如果有一个为true就返回true, 但

python中json.dumps使用的坑以及字符编码

我们知道,python中的字符串分普通字符串和unicode字符串,一般从数据库中读取的字符串会自动被转换为unicode字符串 下面回到重点,使用json.dumps时,一般的用法为: >>> obj={"name":"测试"} >>> json.dumps(obj)'{"name": "\\u6d4b\\u8bd5"}' >>> print json.dumps(obj

python之路-复习(结合前面操作写出实列)

不同语言的特点 编译型:一次性将全部的代码编译成二进制文件.例如(C  C++) 优点:执行效率高 缺点:开发速度慢,不能跨平台 解释型:当程序运行时,从上至下一行一行的解释成二进制. 优点:开发速度快,效率高,可以跨平台 缺点:运行效率低 python 2x 和 python 3x 宏观上的区别 python 2x 源码,重复率高,不规范,而且python 崇尚的是简单优美清晰,所以鬼叔创建了python 3,规范化. python 2x 写中文时,默认会报错,解决办法:一般在写代码时,在首行

Python之路---------&gt;Python介绍

一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 最新的TIOBE排行榜,Python赶超PHP占据第五, Python崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. 由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!! Python可以应用于众多领域,如:数据分析.组件集成

PYTHON 之路 (二) 文件操作/函数/面向对象编程

文件操作 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:   不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用) rU r+U &qu

python之路(四)-set集合

set集合 set是一个无序且不重复的元素集合优点:访问速度快,解决重复问题 l1 = [1,2,34,5,6,7,4,3,3,] s2 = set(l1) #可以以列表元祖等作为参数传进来,set集合会自动转换成元祖并去重#输出结果:{1, 2, 34, 4, 5, 6, 7, 3} 各种方法:add,clear,.....等等 add 合并集合 l1 = [1,2,34,5,6,7,4,3,3,] l2 = [23,3,4,5,100,2,3] s2 = set(l1) #自动转换并去重 s