Chapter1 Python基础|用于查找1
- 一、Python基础
- (一)print函数
- (二)控制输出数字的宽度、精度
- (三)数据结构-列表
- (四)数据结构-元组(时间有限,元组和集合的部分暂且不学,过后再学吧)
- (五)数据结构-集合
- (六)数据结构-字符串
- 1.引住字符串的引号
- 2.列表姐妹
- 3.字符串的内置函数
- 1)find 给出指定字符串的索引值
- 2)capitalize 将字符串首字母大写
- 3)center 将输出的字符串居中对齐
- 4)zfill 通过指定字段宽度来填充0
- 5)expandtabs 更改表符间距
- 6)index(≈find)
- 7)endswith 检查字符串结尾是否是指定字符
- 8)count() 童子字符串中的字符数
- 9)join() 在字符串中添加字符
- 10)split() 切片
- 11)lower() 将任何大写字母转换为小写
- 12)upper() 将任何小写字母转换为大写
- 13)replace('a', 'b') 将该a替换为b
- 14)strip() 从右端和左端删除不需要的元素
- 15)lstrip() & rstrip()
- (七)词典(作业没用到,时间原因,现不记录了)
- (八)控制流语句
- (九)函数
- (十)class 类
为便于搜索,查找知识,我在学习过程中将课程讲义转化为CSDN博客。其中加入了我自己的理解和记录,但整体内容的版权归布树辉老师所有。
一、Python基础
(一)print函数
1.直接输出
print("Hello World")
2.换行输出
1)无效换行
print('Hey')
a = 'line1\
line2\
\
'
print(a)
其中+换行是没有效果的,输出还是一整行。
输出是:
Hey
line1line2
2)有效换行
print("""My name is Rajath Kumar M.P.
I love Python.""")
输出是:
My name is Rajath Kumar M.P.
I love Python.
输出多行的时候需要用三个双引号。
3.连接
1)空格连接
string1 = 'World'
print('Hello', string1)
string2 = '!'
print('Hello', string1, string2)
输出:
Hello World
Hello World !
2)直接连接
print('Hello' + string1 + string2)
输出:
HelloWorld!
4.数据类型转换
1)单个变量的类型转换
print("Actual Number = %d" % 18)
print("Float of the number = %f" % 18)
print("Octal equivalent of the number = %o" % 18)
print("Hexadecimal equivalent of the number = %x" % 18)
print("Exponential equivalent of the number = %e" % 18)
输出:
Actual Number = 18
Float of the number = 18.000000
Octal equivalent of the number = 22
Hexadecimal equivalent of the number = 12
Exponential equivalent of the number = 1.800000e+01
2)多个变量
print("Hello %s %s" % (string1,string2))
5.其他
1)鸡肋功能
print("I want to be printed %s" % 'here')
print("I want to be printed " + 'here')
#输出结果一样,所以没有比要用第一种
2)重复输出
\n 表示换行输出
print("Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug")
输出:
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
3)split() 切片处理
print("\n".join("Jan Feb Mar Apr May Jun Jul Aug".split(" ")))
输出同上。
split 是进行切片处理,这里是在 \n 的位置切片,转换为多个字符串。
4)\t tab对齐
print("""
Routine:
\t- Eat
\t- Sleep\n\t- Repeat
""")
输出:
(二)控制输出数字的宽度、精度
1."%f"默认精度宽度为6
print("%f" % 3.121312312312)
输出:3.121312
2.控制小数点后位数
print("%.5f" % 3.121312312312)
输出:3.12131
3.设置宽度
1)一般设置,设置宽度和精度
print("%9.5f" % -33.121312312312)
输出:-33.12131
这里包括负号和小数点一共9位。
2)补零设置
print("%020.5f" % 3.121312312312)
print("%20.5f" % 3.121312312312)
第一个输出:00000000000003.12131(用零补全)
第二个默认用空格补全。
3)一般设置,仅设置宽度
print("% 9f" % 3.121312312312)
print("% 9f" % -3.121312312312)
输出:
3.121312
-3.121312
宽度的设置是包括符号的,第一个默认有“+”号。精度没有指定的话就是6位。
print("%+9f" % 3.121312312312) #能输出“+”号
print("% 9f" % -3.121312312312)
输出:
+3.121312
-3.121312
4)左对齐,右补齐
print("%-9.3f" % 3.121312312312)
输出:
(三)数据结构-列表
1.列表声明
1)声明空列表
有两种方式
#1.
a = []
#2.
a = list
2)声明非空列表
x = ['apple', 'orange', 'peach']
print(x)
输出:
[‘apple’, ‘orange’, ‘peach’]
输出带一个中括号
2.索引
1)简单索引列表一个元素
举例:
x = ['apple','orange','peach']
print(x[0]) #输出apple
print(x[-1]) #输出peach(人性化)
2)列表嵌套&连接
使用“,”是嵌套,会变成多维的,使用“+”是连接,不会增加维数。
x = ['apple','orange','peach']
y = ['carrot','potato']
z = [x,y, 'Test']
print(z) #输出:[['apple', 'orange', 'peach'], ['carrot', 'potato'], 'Test']
print(z[0][1]) #输出:orange
#要输出整个维度
print(z[0]) #输出:['apple', 'orange', 'peach']
x = ['apple','orange','peach']
y = ['carrot','potato']
print(x + y) #输出:['apple', 'orange', 'peach', 'carrot', 'potato']
3.切片(直接切片)
(Python特有的)
列表是从0开始数起的。
中括号中最后一个数是不输出的。
num = [2,3,2,3,4,5,6,7,8,9]
print(num[1:4]) #输出:[3, 2, 3]
print(num[0:]) #输出:[2, 3, 2, 3, 4, 5, 6, 7, 8, 9]
print(num[:]) #输出:[2, 3, 2, 3, 4, 5, 6, 7, 8, 9]
print(num) #输出:[2, 3, 2, 3, 4, 5, 6, 7, 8, 9]
print(num[0:4]) #输出:[2, 3, 2, 3]
print(num[4:]) #输出:[4, 5, 6, 7, 8, 9]
print(num[:9:3]) #固定步长,( :9)表示0~8之间,9表示步长,所以是从num[0]开始,每过3个就输出1个。输出:[2, 3, 6]
4.列表的内置函数
这些函数只针对列表使用
1)len 计算列表长度
num = [2,3,2,3,4,5,6,7,8,9]
print(len(num)) #输出:10
2)min & max
检索数字的最小值和最大值
num = [2,3,2,3,4,5,6,7,8,9]
print(min(num)) #输出:2
print(max(num)) #输出:9
检索字符串的最小值和最大值(根据ASCII码)
mlist = ['bzaa','ds','nc','az','z','klm']
print(max(mlist)) #输出z
print(min(mlist)) #输出az
nlist = ['1','94','93','1000'] #带引号,是字符串
print(max(nlist)) #输出94
print(min(nlist)) #输出1
检索最长和最短的字符串
names = ['Earth','Jet', 'Air','Fire','Water']
print(max(names, key=len)) #输出:Earth
print(min(names, key=len)) #输出:Jet,因为Jet在Air之前,因此现检索到Jet
3)in 检查某个元素是否在列表中
传统的做法是采用for循环,而python不需要。
x = ['apple','orange','peach']
y = ['carrot','potato']
print('apple' in x) #检查x中有没有apple,有,输出:True
print('apple' in y) #检查y中有没有apple,没有,输出:False
4)list 字符串转换为列表
print(list('hello')) #输出:['h', 'e', 'l', 'l', 'o']
5)append 在列表最后添加元素
在列表最后添加单一元素
lst = [1,1,4,8,7]
lst.append(1)
print(lst) #输出:[1, 1, 4, 8, 7, 1]
'''
错误的做法:
lst = [1,1,4,8,7]
print(lst.append(1))
'''
在列表中嵌套列表
lst = [1,1,4,8,7]
lst1 = [5,4,2,8]
lst.append(lst1)
print(lst) #输出:[1, 1, 4, 8, 7, [5, 4, 2, 8]]
6)count计算特定元素的数量
lst = [1,1,4,8,7]
lst.append(1)
print(lst.count(1)) #输出:3
7)extend 在列表后面连接另一个列表
对比append
lst = [1,1,4,8,7]
lst1 = [5,4,2,8]
lst.extend(lst1)
print(lst) #输出:[1, 1, 4, 8, 7, 5, 4, 2, 8]
8)index???
9)insert(x,y) 插入元素&替换元素
#错误示例:由于lst和lst1的id是一样的,所以输出是一样的,只认一个处理
lst = lst1 = [1,1,4,8,7]
lst.insert(2,'name')
print(lst) #输出:[1, 1, 'name', 4, 8, 7]
lst1[2] = 'name'
print(lst1) #输出:[1, 1, 'name', 4, 8, 7]
#正确做法
lst = [1,1,4,8,7]
lst1 = [1,1,4,8,7]
#插入
lst.insert(2,'name')
print(lst) #输出:[1, 1, 'name', 4, 8, 7]
#替换
lst1[2] = 'name'
print(lst1) #输出:[1, 1, 'name', 8, 7]
10)pop堆栈(有点像索引)
lst = [1,1,4,8,7]
lst.pop()
print(lst) #输出:[1, 1, 4, 8],最后一个不输出
lst = [1,1,4,8,7]
lst.pop(2)
print(lst) #输出:[1, 1, 8, 7],lst[2]不输出
lst = [1,1,4,8,7]
lst.pop(-2)
print(lst) #输出:[1, 1, 4, 7],lst[-2]不输出
11)remove移除列表元素
lst = [1,1,4,8,7]
lst.remove(4)
print(lst) #输出[1, 1, 8, 7]
lst1 = [1, 1, 4, 8, 'Python', 7]
lst1.remove("Python")
print(lst1) #输出[1, 1, 4, 8, 7]
12)del (=remove)
lst = [1, [5, 4, 2, 8], 1, 4, 8, 7]
del lst[1]
print(lst) #输出:[1, 1, 4, 8, 7]
13)reverse反转列表中的元素
lst = [1, [5, 4, 2, 8], 1, 4, 8, 7]
lst.reverse()
print(lst) #输出:[7, 8, 4, 1, [5, 4, 2, 8], 1]
14)sort 列表元素升序、降序排列
升序:
lst = [1, 1, 4, 8, 7]
lst.sort()
print(lst) #输出:[1, 1, 4, 7, 8]
降序:
lst = [1, 1, 4, 8, 7]
lst.sort(reverse=True)
print(lst) #输出:[8, 7, 4, 1, 1]
如果列表是字符串,按ASCII码排序
如果按字符串长度排序,则加上key=len(min和max也有这个功能):
names = ['apple', 'orange', 'peach']
names.sort(key=len)
print(names) #输出:['apple', 'peach', 'orange']
names.sort(key=len,reverse=True)
print(names) #输出:['orange', 'apple', 'peach']
5.复制一个列表
1)全部复制
lst = [2,1,4,3]
lst1 = lst
print(lst)
print(lst1)
print(id(lst))
print(id(lst1))
'''
输出:
[2, 1, 4, 3]
[2, 1, 4, 3]
1319752557056
1319752557056
'''
2)部分复制
lst = [2,1,4,3]
lst1 = lst[1:3]
print(lst1) #输出:[1, 4]
(四)数据结构-元组(时间有限,元组和集合的部分暂且不学,过后再学吧)
元组和列表相似,但是列表中的元素可以修改,而元组不可以。
1.divmod (a,b),返回(商,余数)
(五)数据结构-集合
(六)数据结构-字符串
1.引住字符串的引号
对于单行的字符串,单引号和双引号均可;对于对行的字符串,需要用三个单引号。
2.列表姐妹
字符串是类似于列表的,可以看作是列表
string = 'Taj Mahal is beautiful'
print(string[4]) #输出:M
print(string[9]) #输出: (空格)
3.字符串的内置函数
1)find 给出指定字符串的索引值
找特定的字符的位置
string = 'Taj Mahal is beautiful'
print(string.find('al')) #输出:7(因为al中的a为string[7])
print(string.find('am')) #输出:-1(因为没有找到)
在指定区间之间找特定字符的位置(一次只能找一个)
string = 'Taj Mahalj is beautiful'
print(string.find('j',1)) #输出:2
print(string.find('j',1,15)) #输出:2
2)capitalize 将字符串首字母大写
String3 = 'observe the first letter in this sentence. can you change this sentence'
print(String3.capitalize())
#输出:Observe the first letter in this sentence. can you change this sentence
3)center 将输出的字符串居中对齐
通过指定字段宽度将字符串居中对齐。
string1 = 'Taj Mahalj is beautiful'
string2 = 'Observe the first letter in this sentence.'
print(string1.center(70))
print(string2.center(70))
输出:
string1 = 'Taj Mahalj is beautiful'
string2 = 'Observe the first letter in this sentence.'
print(string1.center(70,'-'))
print(string2.center(70,'-'))
输出:
4)zfill 通过指定字段宽度来填充0
string1 = 'Taj Mahalj is beautiful'
print(string1.zfill(30))
#输出:0000000Taj Mahalj is beautiful
5)expandtabs 更改表符间距
\t 默认设置为8个空格
s = 'h\te\tl\tl\to'
print(s)
print(s.expandtabs(1))
print(s.expandtabs(8))
输出:
6)index(≈find)
如果find找不到会输出-1;index找不到会直接报错ValueError。
string = 'Taj Mahal is beautiful'
print(string.find('al')) #输出:7(因为al中的a为string[7])
print(string.find('am')) #输出:-1(因为没有找到)
print(string.index('al')) #输出:7
print(string.index('am'))
输出:
7)endswith 检查字符串结尾是否是指定字符
默认检查最后一个
string = 'Taj Mahal is beautiful'
print(string.endswith('y')) #输出:False
print(string.endswith('l')) #输出:True
可以指定检查区间
string = 'Taj Mahal is beautiful'
print(string.endswith('l',0)) #输出:True
print(string.endswith('M',0,5)) #输出:True
8)count() 童子字符串中的字符数
string = 'Taj Mahal is beautiful'
print(string.count('a',0)) #输出:4
print(string.count('a',5,10)) #输出:2
9)join() 在字符串中添加字符
在字符串元素间添加一个字符:
print('a'.join('*_-')) #a被加在每个元素之间,输出:*a_a-
print('\n'.join(['1', '2'])) #输出1和2分别为两行
把列表转化为字符串:
string = 'Taj Mahal is beautiful'
a = list(string) #字符串转化为列表
print(a) #输出:['T', 'a', 'j', ' ', 'M', 'a', 'h', 'a', 'l', ' ', 'i', 's', ' ', 'b', 'e', 'a', 'u', 't', 'i', 'f', 'u', 'l']
b = ''.join(a) #列表转化为字符串
print(b) #输出:Taj Mahal is beautiful
也可以在列表中插入,等于给把列表转换为字符串之后再插入的效果:
string = 'Taj Mahal is beautiful'
string1 = list(string)
c = '/'.join(string1)[18:]
d = '/'.join(string)[18:]
print(c) #输出: /i/s/ /b/e/a/u/t/i/f/u/l
print(d) #输出: /i/s/ /b/e/a/u/t/i/f/u/l
10)split() 切片
string = 'Taj Mahal is beautiful'
c = '/'.join(string)[16:]
print(c) #输出:l/ /i/s/ /b/e/a/u/t/i/f/u/l
e = c.split('/',3) #3指3个'/'
print(e) #输出:['l', ' ', 'i', 's/ /b/e/a/u/t/i/f/u/l']
print(len(e)) #输出:4
11)lower() 将任何大写字母转换为小写
string = 'Taj Mahal is beautiful'
print(string.lower()) #输出:taj mahal is beautiful
12)upper() 将任何小写字母转换为大写
string = 'Taj Mahal is beautiful'
print(string.upper()) #输出:TAJ MAHAL IS BEAUTIFUL
13)replace(‘a’, ‘b’) 将该a替换为b
string = 'Taj Mahal is beautiful'
print(string.replace('Taj Mahal', 'Anastasia')) #输出:Anastasia is beautiful
14)strip() 从右端和左端删除不需要的元素
f = ' hello '
print(f.strip()) #输出:hello
f = ' ***----hello---******* '
print(f.strip('*')) #输出: ***----hello---*******
f1 = '***----hello---*******'
print(f1.strip('*')) #输出:----hello---
#指定的时候必须改元素在两端才会删除
print(f.strip(' *')) #输出:----hello---
print(f.strip(' *-')) #输出:hello
15)lstrip() & rstrip()
lstrip() 只删除左边的内容,而rstrip() 只删除右边的内容。
f = ' ***----hello---******* '
print(f.lstrip(' *')) #输出:----hello---*******
print(f.rstrip(' *')) #输出: ***----hello---
(七)词典(作业没用到,时间原因,现不记录了)
可以用用户定义的字符串索引特定的序列。
(八)控制流语句
1.if语句
2.if-else语句
3.if-elif语句
很简单,和C++差不多,格式稍微有点差别。例子:
x = 10
y = 12
if x > y:
print("x>y")
elif x < y:
print("x<y")
if x==10:
print("x=10")
else:
print("invalid")
else:
print("x=y")
4.循环
1)for循环
除了数字的循环,还可以
list_of_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for list1 in list_of_lists:
print(list1)
'''
输出:
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
'''
2)while
都是采用冒号和缩进。
5.break
和C++用法相同
6.continue
和C++用法相同
7.列表推导
快速生成所需的列表。
一般生成列表:
res = []
for i in range(1,11):
x = 27*i
res.append(x)
print(res) #输出:[27, 54, 81, 108, 135, 162, 189, 216, 243, 270]
快速生成列表:
记得用方括号框起来;
for前面是规定格式和输出内容的;
# 例1:
print([27*x for x in range(1,11)])
#输出:[27, 54, 81, 108, 135, 162, 189, 216, 243, 270]
# 例2:
print({str(27*x):27*x for x in range(1,20) if x<=10})
#输出:{'27': 27, '54': 54, '81': 81, '108': 108, '135': 135, '162': 162, '189': 189, '216': 216, '243': 243, '270': 270}
输出不用[],而用():
# 例3:
print(tuple((27*x for x in range(1,20) if x<=10)))
#输出:(27, 54, 81, 108, 135, 162, 189, 216, 243, 270)
两个for循环,先执行后一个,再执行前一个。
# 例4:
print([27*i+z for i in range(50) if i<5 for z in range(1,11)])
#输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118]
(九)函数
1.没有参数的函数
def firstfunc():
print("Hey Rajath!")
print("Rajath, How do you do?")
firstfunc()
'''
输出:
Hey Rajath!
Rajath, How do you do?
'''
funca=firstfunc
funca()
'''
输出:
Hey Rajath!
Rajath, How do you do?
'''
print(id(firstfunc)) #输出:2419421696352
print(id(funca)) #输出:2419421696352
2.有参数的函数
def firstfunc(username):
print("Hey", username + '!')
print(username + ',' ,"How do you do?")
name1 = "Anastasia"
firstfunc(name1)
'''
输出:
Hey Anastasia!
Anastasia, How do you do?
'''
3.返回语句
def times(x,y):
z = x*y
return z #也可以直接return x*y
c = times(4,5)
print(c) #输出:20
可以对函数进行标注,在调用help()语句的时候就可以查看标注:
def times(x,y):
'''返回两个参数的乘积'''
z = x*y
return z
c = times(4,5)
print(c)
help(times)
'''
输出:
20
Help on function times in module __main__:
times(x, y)
返回两个参数的乘积
'''
可以返回多个变量,但需要自己记住返回的顺序;或者直接声明格式。
def egfunc(eglist):
highest = max(eglist)
lowest = min(eglist)
first = eglist[0]
last = eglist[-1]
return highest,lowest,first,last
eglist = [10,50,30,12,6,8,100]
a = egfunc(eglist)
print(a) #输出:(100, 6, 10, 100)
b,c,d,e = egfunc(eglist)
print('b =',b,'\n c =',c,'\n d =',d,'\n e =',e)
'''
输出:
b = 100
c = 6
d = 10
e = 100
'''
4.隐式参数
和C++几乎是一样的,很好理解,懒得打了,直接把老师的教程截图下来。
5.任意数量的参数
类似于指针,在参数前面使用*,1个、2个均可。
def add_n(*args):
res = 0
reslist = []
for i in args:
reslist.append(i)
print(reslist)
return sum(reslist)
s = add_n(1,2,3,4,5)
print(s)
'''
输出:
[1, 2, 3, 4, 5]
15
'''
6.全局和局部变量
和C++是一样的。
7.Lambda函数
可以认为是函数的简约版,没有函数名的定义,采用的定义方式类似于变量。
例子如下:
z = lambda x: x * x
print(z(8)) #输出:64
zz = lambda x, y: (x*y, x**y)
print(zz(2, 3)) #输出:(6, 8)
1)map() 对列表的每个函数定义的函数
list1 = [1,2,3,4,5,6,7,8,9]
list2 = [9,8,7,6,5,4,3,2,1]
eg1 = map(lambda x:x+2, list1)
print(list(eg1)) #输出:[3, 4, 5, 6, 7, 8, 9, 10, 11]
eg2 = map(lambda x,y:x+y, list1,list2)
print(list(eg2)) #输出:[10, 10, 10, 10, 10, 10, 10, 10, 10]
下面这部分没明白:
2)filter() 过滤表中的值
list1 = [1,2,3,4,5,6,7,8,9]
res = filter(lambda x:x<5,list1)
print(list(res))
#输出:[1, 2, 3, 4]