python的一些零碎知识点

1.numpy.zeros((n,m)):生成n行m列的零矩阵
numpy.zeros((n,)):生成1行n列的零矩阵

2.sklearn.model_selection.KFold(n_splits,shuffle,random_state)
这里我们取n_splits=k,方便说明
1)KFold函数用于把训练数据平均分成k份,然后训练k次,每次取1份作为验证集,取k份数据当训练集,最后计算这几次训练的平均值作为模型的真实分类率

2)如果训练数据的数量不能平均分成k份,那前n_samples%k个子集拥有n_samples//k+1个数据,剩下几个子集拥有n_samples//k个数据

3)参数n_splits表示把训练集分成多少份;参数shuffle表示是否打乱原数据的顺序,取False表示不打乱,取True表示打乱,默认取False;random_state表示随机种子数.

4)KFold.split(X, y=None, groups=None):将数据集分成训练集和测试集,并返回索引生成器

5)实例如下:

x=np.arange(12)
for i,(train_index,test_index) in enumerate(kf.split(x)):
    print('i=%d,train_index=%s,test_index=%s'%(i,train_index,test_index))

运行截图:
在这里插入图片描述
这里解答一下自己之前的一个疑惑:不是说好会把训练数据分成多个小数据集么?为什么结果是只分成了两个数据集?还是大小相差这么大的?原因是输出的时候把所有被当作训练数据的小数据集都合并变成我们的训练集了,拿i=0,也就是第一次划分的例子来说,就是所有训练集的索引为3,4,5,6,7,8,9,10,11.

以上参考自:
a) https://blog.csdn.net/kancy110/article/details/74910185
b) https://blog.csdn.net/q337100/article/details/80923059

3.获得array的形状:array.shape
获取list的形状:先转成array,再用shape求形状,如np.array(list).shape

4.获得对象的类别:type(obj),比如:

graph = {}
graph['you'] = ['alice', 'bob', 'claire']
print(type(graph))

运行结果:
在这里插入图片描述

5.判断某对象obj在不在数组t中,并进行相应操作:

if obj not in t:#如果obj不在数组t中
if obj in t:#如果obj在数组t中

6.sys.stdin.readline().strip()用于去除输入字符串首尾的字符,默认是空格、\n、\t 。

7.python获取输入:

import sys
line=sys.stdin.readline().strip()

我觉得和Java的类似,都是和对象调用有关。有关Java输入的可参考这篇文章


8.str转int:
int(str)

另外说一点,在python3中,int代替了long型,也就是说,在python3中,int的最大范围可到2^63-1.

9.判断对象x不为None

if x is not None

10.判断变量x的数据类型:

type(x)

11.如果要匹配减号,那么就要把减号放在第一个,至于原因我也不知道为什么,比如,要匹配这种字符串:a2-,就应该用^[a-zA-Z][a-zA-Z0-9]*[-|+|\*|/|\(|\)|,|\;|:|:=|=]*$这样的正则表达式,在pycharm里匹配结果如下:
在这里插入图片描述
sample那个框是绿色的,说明匹配成功

标识符正则:^[a-zA-Z][a-zA-Z0-9]*$
数字串正则:^[0-9]+$

1)一句话生成小写字母表并存储到一个list里面:

>>> letter_u=[chr(i) for i in range(97,123)]
>>> letter_u
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

2)一句话生成所有字母并存到同一个list里:

letter = [chr(i) for i in range(65,91)] + [chr(i) for i in range(97,123)]

14.将多个list合并为1个list:
直接用加号就行:

>>> letter=letter_s+letter_u
>>> letter
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

15.python中类似C语言条件运算符(?:)的结构:

>>> print('12','12' if 1<2 else token)
12 12
>>> print('12','12' if 1<0 else token)
12 :
>>> token
':'

16.python获取所有可打印字符

import string
print(type(string.printable))
print(string.printable.strip())
print(list(string.printable.strip()))

运行结果:
在这里插入图片描述

17.获取所有可打印字符并存储到list里面:

import string
a = list(string.printable.strip())
print(a)

18.python构造二维数组
1)

DFA1 = [[0]*行数 for i in range(列数)]

2)

import numpy as np
a = np.array([[1,2],[3,4]])
# 如果直接写a=[[1,2],[3,4]],这样得到的a是list,而不是ndarray

19.python获取字符串的中间部分,即把首字符最末字符删除:

a = '(123)'
b = a[1:-1]
print(b)

输出:
在这里插入图片描述

20.今天遇到一个问题,上代码吧:

sym = 'ab'
def identifier_pro():
    for i in sym:
        print(i)
    sym = 'ok'
    return True

这样写会报错,for i in sym那里的sym会报unresolved reference 'sym'sym = 'ok'那里会报local variable 'sym' value is not used。初步推测是两个同名变量如果不加以说明,python无法判断哪个是全局哪个是局部。当然这只是猜测,还没有去求证。在这个自定义函数内部加一句:global sym即可以说明sym是全局变量了。


sym = 'ab'
def identifier_pro():
    global sym
    for i in sym:
        print(i)
    sym = 'ok'
    return True

identifier_pro()
print(sym)

这样的执行结果为:
在这里插入图片描述

21.python循环输入n行数据:

while n:
	input = sys.stdin.readline()
	n -= 1

另外,下面是循环输入不定行数据,然后用ctrl+D结束输入的方法:

import sys
list_new = []
list = []
for line in sys.stdin:
    list_new=line.split()
    list.extend(list_new)

22.获取元素x在list中的索引:

index = list.index(x)

23.在嵌套函数中访问被嵌套函数的变量:添加nonlocal声明:

def func1():
    index = 10
    def func2():
        nonlocal index
        print(index)
    func2()


func1()

运行结果是会输出一个10

24.sys.stdin.readline()得到的是一个str:

import sys
i = sys.stdin.readline()
print(type(i))

运行结果:
在这里插入图片描述

25.关于sys.stdin:
1)sys.stdin.readline()得到的是一个str
2)sys.stdin.readline()得到的是一个str,比方说这个str是‘123’,那么我们调用len(str)得到的结果是4,我估计是因为readline()会读入那个换行符,获取实际长度的方法是sys.stdin.readline().strip()
3)对于sys.stdin.readline().strip().split(),如果需要获取一个字符串,到strip()那里就可以了;而如果要获取一个list,那就必须一直到split()

26.indentaion is not a multiple of four:缩进的空格数不是4的倍数

27.按格式输出:

a = 1
print('a=%d'%a)

和普通输出的区别在于用百分号代替了逗号

28.获取特定的列数据:

a=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
a = [x[:2] for x in a]

以上是获取二维数组a的前两列的代码

另外,这是获取前两行的代码:

a = a[:2]

29.python按下标逆序遍历字符串:

a = '123'
len_a = len(a)
for i in range(len(a)-1,-1,-1):
    print(a[i])

30.python求交集

1)列表解析式

a = 'Et++F'
b = 't+-'
c = [i for i in a if i in b]
print(c)
#最后的输出是['t','+','+']

2)转成set,然后用intersection方法求交集

a = 'Et++F'
b = 't+-'
c = list(set(a).intersection(set(b)))
print(set(a))
print(set(b))
print(c)
#但是这个方法有个弊端就是会删掉重复字符,如果想要统计字符串a中有多少个b中包含的字符会有问题

31.满足条件,跳过下一次循环

#下面这个是逆序打印偶数的代码,通过判断当前迭代的是偶数来跳过下一次循环,最后的输出是6 4 2 0
a = range(6,-1,-1)
a_iter = iter(a)
for i in a_iter:
    print(i)    
    if not i % 2 :
        try:
            next(a_iter)
        except StopIteration:
            pass

32.list转成str:
用join方法:

a = '01'
c = ['0','1','2','3']
b = "".join(c[:2])
print(a == b)

注意,不能直接用b = str(c[:2]),这样得到的b虽然是个字符串,但这个字符串的内容是:['0','1'],长度为9

有一段代码如下:

a = '0123'
for i in range(len(a)):
	if int(a[i])%2:
		a[i] = '0'
print(a)		

会报错:
TypeError: 'str' object does not support item assignment
str是不可变类型,不能直接修改其值,应该把a[i]='0’修改为a = a[:i] + '0' + a[i+1:]

34.深拷贝与浅拷贝

import copy

35.ravel():把多维数组转成一维数组

36.两种除法的区别
单斜杠/:普通除法,可以得到小数
双斜杠//:又称地板除法,只能得到整数
示例如下:
在这里插入图片描述

36.将.py打包成exe:
1.https://ningyu1.github.io/site/post/59-py2exe-pyinstaller/
2.https://www.cnblogs.com/mywolrd/p/4756005.html
3.https://zhuanlan.zhihu.com/p/45288707
有时候去相应目录下是找不到这个exe的,可能的原因是被电脑管家搞掉了

37.打开文件:
file object = open(file_name[,access_mode][,buffering])
关于参数的详细说明可参考这篇文章:菜鸟教程
示例:
fo = open("foo.txt","w")

38.traceback(most recent call last):回溯(最后一次呼叫),是python的异常提示

39.str转dict:用ast的literal_eval:

import ast
user = '{"a":"1","b":"2"}'
user_dict = ast.literal_eval(user)
print(type(user_dict))

运行结果:
在这里插入图片描述

40.extend和append的区别:

  • extend接受一个参数,这个参数总是会被视为一个list
  • append接受一个参数,这个参数可以是任何数据类型,并简单地追加到尾部

上代码:

list_extend = []
list_append = []
list = {'1','2','3'}
list_extend.extend(list)
list_append.append(list)
print("list_extend=",list_extend)
print("list_append=",list_append)

运行结果:
在这里插入图片描述

41.python获取键值:
dict['key_name'],如:

dict = {"name": "yuan", "id": "1234567"}
print(dict['name'])

42.关于python从字典中提取相关项的要求,我目前是没有发现什么好办法的,我的想法就是根据key值直接提取键值(dict['key_name']),然后动态构建字典对象,具体的讲解如下:
https://blog.csdn.net/u014291497/article/details/51052139

43.python比较字符串:==和is好像都可以,具体差别和原理暂时不清楚

44.python同时遍历多个list:用zip函数

list1 = [1,2,3]
list2 = [4,5,6]
for i,j in zip(list1,list2):
    print(i,j)

结果:
在这里插入图片描述
45.string.find(substr)函数,检测字符串string中是否包含子字符串substr,可以指定开始和结束范围;如果包含指定子字符串,则返回子字符串在string中的起始位置,否则返回-1。
参考链接:https://www.runoob.com/python3/python3-string-find.html

46.求解list、str的长度:
len(list\str)

47.用w模式打开txt文件后,往文件中写入的模式是覆盖,要想追加,可以把w参数改为a。关于w模式的功能:打开一个文件用于写入,如果该文件已存在则打开文件,并从开头开始编辑,即原文件内容会被覆盖;如果该文件不存在,则创建新文件

48.dict转json:json.dumps(dict)
json转dict:json.loads(json)

49.在anaconda的prompt中启用复制粘贴快捷键:
1)点击标题栏,选择属性
在这里插入图片描述
2)在选项那一栏勾选图中红框的那一栏
在这里插入图片描述
3)最后还要注意的就是,它用的是CTRL+shift+c/v,不是平时用的CTRL+c/v

50.把numpy数组转成图像保存:我用的是matplotlib.image.imsave(filename,np_array)
更多操作请见此处

51.matplotlib绘制多个图像:

titles = ['origin','noise','averaging','gaussian','median','bilateral']
images = [peppers,img,blur1,blur2,blur3,blur4]

for i in range(6):
    plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])

plt.show()

效果:
在这里插入图片描述

52.查看第三方库的版本号:
以opencv为例:

import cv2
print(cv2.__version__)

运行结果:
在这里插入图片描述
53.绘制用numpy数组表示的图像:
img是一个ndarray

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])

54.yield关键字:
彻底理解python中的yield
简单来说,yield是一个类似return的关键字,迭代一次遇到yield时就返回yield后面的值。并且下一次迭代时,会从上一次迭代遇到的yield后面的代码开始执行

55.关于python中的匿名函数,比如lambda x:x+1,冒号前是函数的参数,冒号后面的表达式的值就是函数的返回值。

56.字典形数据结构的items方法以列表的形式返回(键,值)对数组,如菜鸟教程举的例子:

dict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}
 
print "字典值 : %s" %  dict.items()

运行结果:
在这里插入图片描述
57.矩阵乘法中。星乘(*)是两个矩阵对应位置上的元素相乘;点乘(dot)是正常的矩阵乘法:

import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
c = a*b
print(c)
d = a.dot(b)
print(d)

运行结果:
在这里插入图片描述

58.读取图片
读取图片需要载入matplotlib.pyplot和numpy,如下:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
I=mpimg.imread('test.jpg')
plt.imshow(I)

运行结果:
在这里插入图片描述

59.查看当前目录:
print os.getcwd()
运行结果:
在这里插入图片描述

60.查看当前使用的python解释器的位置

import sys
import os
print(sys.executable)

61.关闭文件:

f=open(...)
f.close()

62.assert用于判断一个表达式,在表达式取值为false时触发异常

63.list[-1]表示读取这个list的倒数第一个数

64.查看python安装了哪些包:
1)用pip list
2)进入python命令行,然后输入help(‘modules’)

65.获取当前时间

import datetime
start_time = datetime.datetime.now()

66.计算程序运行时间

import datetime


start_time = datetime.datetime.now()
print("start_time=",start_time)

'''
run your code
'''

end_time = datetime.datetime.now()
print("end_time=",end_time)

print((end_time-start_time).seconds)

67.python获取命令行输出

import subprocess
output=subprocess.getoutput(你的命令行指令)

68.python获取文件大小
fsize=os.path.getsize(filePath)
这样得到的是以bytes为单位的大小

69.vscode修改python解释器路径:用ctrl+shift+p调出命令模式,输入python:interpreter来进行解释器的选择

70.查看python创建的虚拟环境路径:conda info -e
在这里插入图片描述
在Linux下的虚拟环境中,python解释器是在虚拟环境的bin文件夹下面的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值