python学习笔记

跟随课堂作业进度写的笔记,主要是自己需要用的。旁边有目录。

对列表

set()

set()函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

add()

add() 方法用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作

1
2
3
4
5
6
7
8
9
from random import randint

x = set()
while len(x)<20:
x.add(randint(1,100))
#这样创建的就是没有重复量的了,很方便,不用自己再加判断
print(x)
print(sorted(x))

remove()

删除特定值,且删除的是第一个匹配项

1
2
3
4
5
6
7
8
9
aList = [123, 'xyz', 'zara', 'abc', 'xyz'];

aList.remove('xyz');
print "List : ", aList;
aList.remove('abc');
print "List : ", aList;

#List : [123, 'zara', 'abc', 'xyz']
#List : [123, 'zara', 'xyz']

reverse()

用于反向列表中元素。

1
2
3
4
5
6
aList = [123, 'xyz', 'zara', 'abc', 'xyz']

aList.reverse()#注意:不可以写成alist=alist.reverse(),这样得到的是返回值None
print ("List : ", aList)
#结果:
#List : ['xyz', 'abc', 'zara', 'xyz', 123]

对字典

__contains__(key)

在判断一个字典dict是否包含某个键值item,可以使用的是if item in dict.keys():。而字典比较大的时候会出现耗时严重的情况,于是改成**if dict.__contains__(item):**速度会变快很多。

1
2
dict = {'Name':'coco','Sex':'Female'}  # 定义字典
print(dict.__contains__('Name')) # True

itertools 模块

cycle()

  • 函数仅接受一个参数作为输入,可以像列表,字符串,元组等
  • 该函数返回迭代器对象类型
  • 在函数的实现中,返回类型为yield,它在不破坏局部变量的情况下挂起函数执行。由生成中间结果的生成器使用
  • 它遍历输入自变量中的每个元素并产生它并重复循环并产生一个无穷大的自变量序列

相关链接:【Python】Itertools.cycle()用法及代码示例

compress()

此迭代器根据作为其他参数传递的布尔列表值有选择地从传递的容器中选择要打印的值。打印与布尔值true相对应的参数,否则将全部跳过。

在此,我们为函数提供两个参数。第一个参数将是迭代器,第二个参数将是选择器True/1或者False/0。如果第一个参数的对应选择器是True,则将打印相应的数据,然后我们将得到相应的输出。

格式:

1
compress(iter, selector)
1
2
3
4
5
x = range(1, 20)
y = (1,0)*9+(1,)#*9代表着复制九次
#y打印出来是(1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1)
list(itertools.compress(x, y))
#list打印出来是:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

groupby()

相关链接:itertools中的groupby()的原理及其操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import itertools
def group(v):
if v>10:
return 'greater than 10'
elif v<5:
return 'less than 5'
else:
return 'between 5 and 10'
x = range(1,20,3)
#1,4,7,10,13,16,19
y = itertools.groupby(x, group) #根据函数返回值对序列元素进行分组
for k, v in y:
print(k, ':', list(v))
#k里面存的是group的返回值
#v存的是对应的x
#每提取一次,都是对新的值进行一次分类判断

"""
结果:
less than 5 : [1, 4]
between 5 and 10 : [7, 10]
greater than 10 : [13, 16, 19]
"""

迭代器

指能够被内置函数next调用并不断返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值的对象称为迭代器(Iterator)

相关链接:[Python内置类型(5)–迭代器类型](https://www.cnblogs.com/sesshoumaru/p/python-iterator.html#:~:text=Python内置类型 (5)–迭代器类型. 指能够被内置函数 next 调用并不断返回下一个值,直到最后抛出 StopIteration 错误表示无法继续返回下一个值的对象称为迭代器,( Iterator) 其实以上的说法只是侠义上的迭代器的定义,在python中,迭代器还需要实现可迭代接口 ( Iterable ),可迭代接口需要返回的是一个迭代器对象,这样迭代器就能够被 for 语句进行迭代。.)

可以理解成一个指针

另外,for循环每执行一次即相当于调用了一次next(iterator)方法,直到捕获到StopIteration异常退出循环。

写程序理解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import itertools
x="abcdefg"
y=itertools.cycle(x)#返回的应该是一个迭代器类型的
i=1
ch0=next(y)
print("ch0=",ch0)
for ch1 in y:
i+=1
if i>10:
break
print(ch1,end=' ')#跳出时,i==11,ch1==d
print("\n——————")
for i in range(10):
ch2=next(y)
print(ch2,end=' ')

"""
输出:
ch0= a
b c d e f g a b c
——————
e f g a b c d e f g
"""

由以上可以发现,用了next(y)可以这样理解:next是在调用的时候才往下跳,取一个新的值。最初始在第一个值之前,当第一次调用了next的时候就跳到第一个值。next或者for(本质也是next)移动取值了之后的效果是保存的,就像指针移动了之后指向的是操作后的地方。如例子中ch0读了y的第一个值a后,ch1就是从第二个值b开始读了

创建可迭代对象:iter()函数

相关链接:【Python】iter()用途及如何创建一个可迭代的对象_

(注意上面链接关于类型的判断)


对字符串

find()

检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。

1
2
3
4
5
6
7
8
9
10
11
12
13
str.find(str, beg=0, end=len(string))
#str -- 指定检索的字符串
#beg -- 开始索引,默认为0。
#end -- 结束索引,默认为字符串的长度。

a='hello,world.'
print a.find("o,")
#输出:4

#单纯判断有没有可以不用函数,比如:
b='abcde'
'ab' in b
#输出:True

join()

用于将序列中的元素以指定的字符连接生成一个新的字符串。

1
2
3
4
5
6
str = "-";
seq = ("a", "b", "c")# 字符串序列
print str.join( seq )
#输出是a-b-c

eval('*'.join(map(str,range(1,6))))#输出5的阶乘

count()

用于统计字符串里某个字符或子字符串出现的次数。可选参数为在字符串搜索的开始与结束位置。

1
str.count(sub, start= 0,end=len(string))
  • sub – 搜索的子字符串
  • start – 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
  • end – 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。

swapcase()

将字符串大小写互换

1
str.swapcase()

replace()

把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。

(注意,更改的不是原字符串,而是str指向的内容,字符串是不可更改的)

1
2
3
4
5
6
7
str = "this is string example....wow!!! this is really string";
print str.replace("is", "was");
print str.replace("is", "was", 3);

#输出:
#thwas was string example....wow!!! thwas was really string
#thwas was string example....wow!!! thwas is really string

endswith()

用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False。可选参数"start"与"end"为检索字符串的开始与结束位置。

1
str.endswith(suffix[, start[, end]])
  • suffix – 该参数可以是一个字符串或者是一个元素。
  • start – 字符串中的开始位置。
  • end – 字符中结束位置。

可用于判断文件名后缀

1
2
3
4
fileName='hello.jpg'
fileEnd='jpg'
print(fileName.endswith(fileEnd))
#True

相对应的是startswith()

re.split()

一次加入多个分割条件

形式:

1
2
import re
re.split(pattern, string[, maxsplit=0, flags=0])

pattern:匹配的字符串(可使用正则表达式)
string:需要切分的字符串
maxsplit:分隔次数,默认为0(即不限次数)
flags:标志位,用于控制正则表达式的匹配方式,比如:是否区分大小写

正则表达式表见链接:正则表达式

1
2
3
4
import re
s='abc, abc, defg, dds'
re.split('\W+',s) # \W匹配任何非单词字符
#结果:['abc', 'abc', 'defg', 'dds']
1
2
3
4
import re
s='abc, abc, defg, dds'
re.split('(\W+)',s) # 如果加上了括号,返回值会包括剔除的部分
#结果:['abc', ', ', 'abc', ', ', 'defg', ', ', 'dds']

isdigit()

判断一个字符串是否只含有数字/一个字符是否为数字,是则返回True,不是则返回False

1
2
3
4
password='hello1234HHH'
for ch in password: #这样就可以用每个字母了
if ch.isdigit():
digitN=1

同类的还有:**isupper()**判断是否是大写,**islower()**判断是否是小写


运算

math.sqrt()

其实就是开根号,但是要import math,并且使用的时候不能单独一个sqrt

reduce()

对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

1
2
3
4
5
6
7
8
from functools import reduce #需要导入模块functools
def add(x, y) : # 两数相加
return x + y
sum1 = reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5
sum2 = reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
print(sum1)
print(sum2)
#结果:15\n15

cmp()

cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。

lambda()

有点像#define一个格式的感觉

1
lambda arguments : expression
1
2
3
x = lambda a : a + 10
print(x(7))
# 17

其他函数

isintance()

isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()

1
isinstance(object, classinfo)
  • object – 实例对象。
  • classinfo – 可以是直接或间接类名、基本类型或者由它们组成的元组。

isinstance() 与 type() 区别:

  • type() 不会认为子类是一种父类类型,不考虑继承关系。

  • isinstance() 会认为子类是一种父类类型,考虑继承关系。

如果要判断两个类型是否相同推荐使用 isinstance()。

1
2
3
4
5
6
7
8
class A:
pass
class B(A):
pass
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns Fals

bool()

bool()函数用于将给定参数转换为布尔类型,如果没有参数,返回 False。

bool 是 int 的子类。

1
2
print(bool(1))
#True

扩展:布尔类型

Python 中布尔值使用常量 True 和 False 来表示。

1、在数值上下文环境中,True被当作 1,False 被当作0

2、其他类型值转换 bool 值时除了 ‘’、""、’’’’’’、""""""、0、()、[]、{}、None、0.0、0L、0.0+0.0j、False*为 False外,其他都为 True


python学习笔记
http://sample.com/2022/04/05/python学习笔记/
作者
Luo Yutong
发布于
2022年4月5日
许可协议