0%

python基础知识笔记

字符串

字符串拼接整数

直接用+是不行的,需要先将int转为str在转换才行

列表

初始化列表

参考链接

1
[0 for _ in range(k1*k2)]

获取元素,没有返回默认值

参考链接

1
2
3
4
5
6
7
#按照Python的精神,“要求宽恕,而不是允许”,这是一种方法:
try:
b = a[4]
except IndexError:
b = 'sss'
#本着“寻求许可,而不是宽恕”的非Python精神,这是另一种方式:
b = a[4] if len(a) > 4 else 'sss'

解题实践—-罗马数字转整数

1
2


索引和切片

注意一点,负号是从右往左索引,最右边是-1

1
2
3
4
5
6
7
8
9
# 索引从0开始,含左不含右
print ('[4]=', mylist[4])
print ('[-4]=', mylist[-4])
print ('[0:4]=', mylist[0:4])
print ('[:4]=', mylist[:4])#这里是从最左端到4索引
print( '[4:]=', mylist[4:])#这里是从4索引到最右端
print ('[0:4:2]=', mylist[0:4:2])#这里是从0~4每隔2索引
print ('[-5:-1:]=', mylist[-5:-1:])#从-5到-1索引全部
print ('[-2::-1]=', mylist[-2::-1])#从-2到最左端,每隔-1索引

range()使用

生成一列数,但是类型是<class 'range'>,所以在使用的时候需要根据自己所需的类型转换一下,下面有几种用法:

1
2
3
4
5
6
7
#转换类型
list(range(10))
#使用列表生成式
x=[i for i in range(10)]
#用在循环中当索引
for i in range(10):
print(i)

打乱列表元素

1
2
3
4
5
6
import random
#调用随机库中的shuffle函数
x=[i for i in range(10)]
print(x)
random.shuffle(x)
print(x)

列表的几种生成式

1
2
3
4
5
6
7
8
#第一种
x=[x for x in range(10)]
#第二种带if
x=[x ** 2 for x in range(21) if x%2]
#第三种两个for
x=[m + n for m in'ABC'for n in'XYZ']
#第四种字典键值对
x=[k + '=' + v for k, v in d.items()]
  • 第四种需要注意:如果是字符串+int型的表达式,会报错,如下面这种

    1
    2
    3
    4
    5
    6
    heights = {'Yao':226, 'Sharq':216, 'AI':183}
    x=[k+'='+ v for k,v in heights.items()]
    print(x)
    #TypeError: must be str, not int
    #要先将int转为str类型
    x=[k+'='+ str(v) for k,v in heights.items()]
  • 列表生成式生成二维列表

    1
    2
    3
    [[_init_x(i, j) for j in range(0, dim_j)] for i in range(0, dim_i)]
    #可以理解一下一维的[x**2 for x in range(5)]就是在前面的x**2循环5次生成五个数组成一维向量
    #那同样可以扩展到二维,先看最外层,也就是要在前面生成一个列表,循环几次就生成几个列表,然后列表中的元素再利用列表生成式来生成

元组

元组类似列表,元组里面的元素也是进行索引计算。列表里面的元素的值可以修改,而元组里面的元素的值不能修改,只能读取

集合

Python中集合主要有两个功能,一个功能是进行集合操作,另一个功能是消除重复元素。

把字符串拆分为单个字符

1
2
a = set("abcnmaaaaggsng")
print ('a=', a)

set没有sort方法

AttributeError: ‘set’ object has no attribute ‘sort’

set方法只能传一个值哦

所以可以把列表或者元组转为集合,但不能直接在set方法里面赋多个值,比如下面是错误的:

1
s=set('hello','world')#**TypeError**: set expected at most 1 arguments, got 2

字典

获取字典的keys和values

1
2
print( k.keys())
print( k.values())

字典的get和pop

1
2
k.get('edu', -1) # 通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value
k.pop('like')#删除字典元素

用zip生成字典

1
zl = zip(('A', 'B', 'C'), [1, 2, 3, 4]) # zip可以将列表、元组、集合、字典‘缝合’起来

字典的遍历方法

1
2
3
4
5
6
7
#第一种
heights = {'Yao':226, 'Sharq':216, 'AI':183}
for i in heights:
print (i, heights[i])#单独打印i的话就只有key
#第二种
for key, value in heights.items():
print(key, value)

初始化字典

1
2
3
#dict3=dict(zip([0 for _ in range(k1*k2)],[0.0 for _ in range(k1*k2)]))

#setdefault,用法如下: dict.setdefault(key,[这里设置如果不存在想将值设置为啥,默认为None])

给字典排序

1
2


函数

高阶函数

把另一个函数作为参数传入一个函数,这样的函数称为高阶函数。函数本身也可以赋值给变量,函数与其它对象具有同等地位。

map函数

将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。这个map函数的参数列表有两个,第一个是自己传一个函数,第二个是列表类型。

自己传入的函数只有一个参数

1
2
myList = [-1, 2, -3, 4, -5, 6, 7]
map(abs, myList)

reduce函数

reduce把一个函数作用在一个序列[x1, x2, x3…]上,这个函数必须接收两个参数reduce把结果继续和序列的下一个元素做累积计算使用的时候要先导包

1
2
3
4
5
6
from functools import reduce
#累计求和
def addsum(a,b):
return a+b
mylist=[1,2,3,4,5]
ans=reduce(addsum,mylist)

filter函数

把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。是True的话过滤掉,是False的话留下。但是要知道filter函数返回的是一个filter对象,如果要看到列表结果还需要自己转换类型。

1
2
3
4
def is_odd(x):
return x%2
m=filter(is_odd,mylist)
list(m)

sorted函数

实现对序列排序,默认情况下对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1。可以自定义判断函数,然后传入sorted,传入函数包含两个参数,返回值是bool类型。**在c++中的算法库中sort也有类似用法。

默认排序:数字大小或字母序(针对字符串),但是要注意sorted是不会对原来的列表进行修改的,通过返回值生成一个新的排序后的列表,这点与c++不同

也可以使用 list 的 list.sort() 方法。这个方法会修改原始的 list(返回值为None)。通常这个方法不如sorted()方便-如果你不需要原始的 list,list.sort()方法效率会稍微高一些

1
sorted(myList)

Python3中sorted 语法:

1
sorted(iterable, key=None, reverse=False)

参数说明:

  • iterable — 可迭代对象。
  • key — 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse — 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
1
2
3
#比如一个列表中存放好几个元组,要求自定义对元组的排序,这下只能通过使用指定key来比较
L=[('b',2),('a',1),('c',3),('d',4)]
sorted(L,key=lambda x:x[1])#指定key为比较每个元组中的第二个元素的大小,然后进行排序,默认为升序,可以通过reverse 设置,这里的lambda函数可以这样理解:因为只有一个参数x,所以即把里表中的每一个元素传入函数,然后对其取值。

当然也可以自定义函数来实现python2中的sorted方法,文末有链接

比如下面的:

1
2
3
from functools import cmp_to_key
#可以使用cmp_to_key函数转换一下
sorted(L,key=cmp_to_key(lambda x,y:x[1]-y[1]))

参考链接

关于python2和python3中高阶函数sorded的变换

本文标题:python基础知识笔记

文章作者:GavinYGM

发布时间:2020年04月18日 - 11:04

最后更新:2020年05月28日 - 02:05

原始链接:http://www.gavinygm.cn/2020/04/18/python%E7%AC%94%E8%AE%B0/

许可协议: 转载请保留原文链接及作者。