s='abcdefgdehde'print(s.find('de'))print(s.find('de',5))print(s.rfind('de'))print(s.find('ded',10,100))不存在,输出-1print(s.count('d'))print(s.index('def'),10) #不存在,直接报错答案:3710-13Traceback (most recent call last): File "C:/Users/Administrator/Desktop/处理/t1.py", line 7, inprint(s.index('ded'),10)ValueError: substring not foundsplit 和join的用法>>> s='中国 你好 朱群喜'>>> s.split()['中国', '你好', '朱群喜']>>> len(s.split())3>>> Hello='-'.join(['中国', '你好', '朱群喜'])>>> Hello'中国-你好-朱群喜'lower,upper,capitalize,title,swapcase字符串转换为小写、大写、首字母大写、每个单词的首字母大写、大小写互换s='What is Your name?'print(s.lower())print(s.upper())print(s.capitalize())print(s.title())print(s.swapcase())答案:what is your name?WHAT IS YOUR NAME?What is your name?What Is Your Name?wHAT IS yOUR NAME?s='中国,中国'print(s.replace('中国','中华人民共和国'))print(s)#s的值没有改变答案:中华人民共和国,中华人民共和国中国,中国strip使用a='cbagrfagfafca'print(a.strip('abc'))答案:grfagfafeval使用print(eval('3+4'))import mathprint(eval('help(math.sqrt)'))
#通过python 添加环境变量 import osmingw_path = 'C:\Program Files\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin'os.environ['PATH'] = mingw_path + ';' + os.environ['PATH']
使用数组索引数组
例:产生一个一组数组,使用数组来索引出需要的元素。让数组[3,3,1,8]取出x中的第3,3,1,8的四个元素组成一个数组view
>>> x = np.arange(10,1,-1)>>> xarray([10, 9, 8, 7, 6, 5, 4, 3, 2])>>> x[np.array([3, 3, 1, 8])]array([7, 7, 9, 2])
当然,类似切片那样,Index也可以使用负数。但是索引值不能越界!
>>> x[np.array([3,3,-3,8])]array([7, 7, 4, 2])
数组纵向合并
c = np.vstack((a,b))
数组横向合并
d = np.hstack((a,b))
查询某个范围的数据
>>> cond = (arr_num >=5) & (arr_num <= 26)>>> arr_2 = np.extract(cond, arr_num)>>> arr_2array([ 5, 6, 8, 9, 10, 13, 14, 15, 16, 17, 18, 25, 23, 9, 14])
获取csv的表头
X = pd.read_csv(data_path_X)feature_name=X.columns
>>> import math>>> math.sqrt(3**2+4**2)5.0十六进制:0x1f 16+15=31八进制:0o11 8+1=9二进制:0b11 2+1=3复数:>>> a=3+4j>>> a.real>>> a.imag>>> a.conjugate() 共轭复数字符串:>>> a='abc'+'124''abc124'三双引号或三单引号注释(支持换行)"""1234"""'''asdf'''字符串格式化:>>> '''My name is %s, and my age is %d'''%('Zhu qunxi',25)'My name is Zhu qunxi, and my age is 25'转义字符:\n 换行符 \'' 双引号\t 制表符 \\ 一个\\r 回车 \ddd 3位八进制数对应的字符\' 单引号 \xhh 2位十六进制对应的字符Python运算符x/y 除法 x//y整除 x%y取模(ps:浮点数也可以) x**y幂运算 x!=y不等于x or y x and y not x x in y; x not in y 成员测试运算符x is y; x is not y 对象实体统一性测试(地址)|,^,&,<<,>>,~ 位运算符 (例如: 3<<1等于6)&,|,^ 集合交集,并集,对称差集>>> 3*'a''aaa'>>> 3*[1,2,3][1, 2, 3, 1, 2, 3, 1, 2, 3]>>> ('aaa,,,').rstrip(',') 'aaa'>>> ('aaa,,1,12323').rstrip('123')'aaa,,1,'
>>> a=[1,2,3,4]>>> b=[2,3,4,5] >>> c=a+b[1, 2, 3, 4, 2, 3, 4, 5] #拼接,不同于numpy数组的加法>>> d=list(map(str,c)) #map为python内置函数,不需要导入任何模块['1', '2', '3', '4', '2', '3', '4', '5']>>> d=list(map(math.sin,c))[0.8414709848078965, 0.9092974268256817, 0.1411200080598672, -0.7568024953079282, 0.9092974268256817, 0.1411200080598672, -0.7568024953079282, -0.9589242746631385]python常用内置函数abs(x):绝对值, bin(x):将数字x转化为二进制串,chr(x):返回ASCII编码为x的字符cmp(x,y):xy返回正数,,x==y返回0,Python 3不在支持dir(x):返回x的成员列表可以把list,tuple,dict和string相互转化。#################################################字符串转换成列表>>>a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]">>>type(a) >>> b = eval(a)>>> print b[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]>>> type(b) #################################################字符串转换成字典>>> a = "{1: 'a', 2: 'b'}">>> type(a) >>> b = eval(a)>>> print b{ 1: 'a', 2: 'b'}>>> type(b) #################################################字符串转换成元组>>> a = "([1,2], [3,4], [5,6], [7,8], (9,0))">>> type(a) >>> b = eval(a)>>> print b([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))>>> type(b)
def is_odd(x): return x % 2 == 1利用filter()过滤掉偶数,返回由符合条件元素组成的新list:filter(is_odd, [1, 4, 6, 7, 9, 12, 17])利用filter()过滤出1~100中平方根是整数的数,即结果应该是:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]import mathdef is_sqr(x): return math.sqrt(x) % 1 == 0print filter(is_sqr, range(1, 101))float(x):将数字或字符串x转换为浮点数并返回>>> float('123.354')123.354>>> float(3)3.0>>> (' asdf,asdf,adsf ').strip().split(',') ['asdf', 'asdf', 'adsf']hex(x):将数字转换为十六进制串id(obj):返回对象obj的标识(地址)input([提示内容字符串])int(x):返回整数部分len(obj): 返回对象obj包含的元素个数,适合于元组,集合,字典,字符串,列表list([x]),set([x]),tuple([x]),dict([x]):转换成列表。。。map(函数,序列):映射,返回列表 (python 3 以上要加list)oct(x):把数字转化成八进制open/文件操作f=open('/tmp/hello','w')#open(路径+文件名,读写模式)#读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式rb 以二进制读模式打开wb 以二进制写模式打开 (参见 w ) r 只能读 r+ 可读可写 不会创建不存在的文件 从顶部开始写 会覆盖之前此位置的内容 w+ 可读可写 如果文件存在 则覆盖整个文件不存在则创建 w 只能写 覆盖整个文件 不存在则创建 a 只能写 从文件底部添加内容 不存在则创建 a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建注意:1、使用'W',文件若存在,首先要清空,然后(重新)创建,f.read([size]) size未指定则返回整个文件,如果文件大小>2倍内存则有问题.f.read()读到文件尾时返回""(空字串)file.readline() 返回一行file.readline([size]) 返回包含size行的列表,size 未指定则返回全部行f.write("hello\n") #如果要写入字符串以外的数据,先将他转换为字符串.例子,读取csv文件,转换成xlsx格式输出:
mainpath='E:/linwei/神经/Ge_csv/' filename = mainpath + 'labels.csv' filename_out='Yes.xlsx' f = open(filename) f_out = open(filename_out, "w") for line in f.readlines(): data=(line.replace(',','\t')).strip()#把csv的逗号',’分隔符换成'\t'制表符 f_out.write(data+"\n") f_out.close()
def f(x, y):
return x + y调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:先计算头两个元素:f(1, 3),结果为4;再把结果和第3个元素计算:f(4, 5),结果为9;再把结果和第4个元素计算:f(9, 7),结果为16;再把结果和第5个元素计算:f(16, 9),结果为25;由于没有更多的元素了,计算结束,返回结果25。reversed(列表或元组): 返回逆序后的迭代对象str(obj): 把对象obj转换为字符串round(x):对x四舍五入,返回的是整型类似C语言中对于结构体排序class Student: def __init__(self, name, grade, age): self.name = name self.grade = grade self.age = age def __repr__(self):#必须加上__repr__,否则就返回的是地址
return repr((self.name, self.grade, self.age)
student_objects = [Student('john', 'A', 15),Student('john', 'A', 10),Student('john', 'C', 10), Student('john', 'B', 10),Student('jane', 'B', 12),Student('dave', 'B', 10)] student_objects=sorted(student_objects, key=lambda x: (x.age,x.grade))#先按年龄,再按年级 print(student_objects) 答案:[('john', 'A', 10), ('john', 'B', 10), ('dave', 'B', 10), ('john', 'C', 10), ('jane', 'B', 12), ('john', 'A', 15)]
from operator import itemgetter, attrgetter#用operator 函数来加快速度 student_objects=sorted(student_objects, key=attrgetter('age', 'grade')) print(student_objects) student_tuples = [ ('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] student_objects=sorted(student_tuples, key=itemgetter(1,2)) print(student_objects) 答案:
[('john', 'A', 10), ('john', 'B', 10), ('dave', 'B', 10), ('john', 'C', 10), ('jane', 'B', 12), ('john', 'A', 15)]
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]#先看一下Boolean value 的排序: print(sorted([True,False]))#===>结果[False,True] list1=[7, -8, 5, 4, 0, -2, -5] #1.正数在前负数在后 2.整数从小到大 3.负数从大到小 list1=sorted(list1,key=lambda x:(x<0,abs(x))) #负数满足x<0,返回True,所以负数排在后面;然后再按绝对值从小到大
sorted(iterable, key=None, reverse=False)
zip用法:
x = [1, 2, 3] y = [4, 5, 6] z = [7, 8, 9] for i,j,k in zip(x,y,z): print(i,j,k) xyz = zip(x, y, z) print(list(xyz)) 输出:
1 4 7
2 5 8 3 6 9 [(1, 4, 7), (2, 5, 8), (3, 6, 9)]__str__和__repr__如果要把一个类的实例变成 str,就需要实现特殊方法__str__():class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __str__(self): return '(Person: %s, %s)' % (self.name, self.gender)现在,在交互式命令行下用 print 试试:>>> p = Person('Bob', 'male')>>> print p(Person: Bob, male)但是,如果直接敲变量 p:>>> p似乎__str__() 不会被调用。因为 Python 定义了__str__()和__repr__()两种方法,__str__()用于显示给用户,而__repr__()用于显示给开发人员。有一个偷懒的定义__repr__的方法:class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __str__(self): return '(Person: %s, %s)' % (self.name, self.gender) __repr__ = __str__ 内置函数max,min,sum的用法
import random a=[random.randint(1,10) for i in range(10)] print(max(a),min(a),sum(a)) sum(a)/len(a) #均值,Python 2.7 sum(a)*1.0/len(a)
for i in range(10): print(i,end=' ') #输出不换行 答案:0 1 2 3 4 5 6 7 8 9
写入到指定文件 f=open(name,'a+') print('hello!',file=f) f.close() 模块导入与使用 import 模块名 [as 别名] from 模块名 import 对象名 [as 别名] #好处:减少查询次数,提高访问速度,减少代码量,不需要使用模块名作为前缀 from math import sin as f f(3) 输出:0.14112
python中if __name__ == '__main__': 的解析当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用.模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名, 不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"。///在cmd 中直接运行.py文件,则__name__的值是'__main__';而在import 一个.py文件后,__name__的值就不是'__main__'了;从而用if __name__ == '__main__'来判断是否是在直接运行该.py文件如:#Test.pyclass Test: def __init(self):pass def f(self):print 'Hello, World!'if __name__ == '__main__': Test().f()#End你在cmd中输入:C:>python Test.pyHello, World!说明:"__name__ == '__main__'"是成立的你再在cmd中输入:C:>python>>>import Test>>>Test.__name__ #Test模块的__name__'Test'>>>__name__ #当前程序的__name__'__main__'无论怎样,Test.py中的"__name__ == '__main__'"都不会成立的!所以,下一行代码永远不会运行到!//
>>> list('helllo, world!')['h', 'e', 'l', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!']import timetime.time() 返回当前时间列表的内置函数功能,ps:对原来的列表进行操作,不同与sorted!import randoma=list(range(13))random.shuffle(a)print(a)a.sort()print(a)a.sort(reverse=True)print(a)a.sort(key=lambda x:len(str(x)))print(a)答案:[4, 0, 11, 8, 6, 9, 1, 2, 3, 10, 7, 5, 12][0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12][12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0][9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 12, 11, 10]默认对字典的"键"进行计算(max,min,sum)a={ 'b':1,'a':2}print(max(a))print(max(a.values()))答案:b2enumerate枚举元素的下标和元素的值import numpy as npfor i,j in enumerate(range(1,10,2)): print(i,j)答案:0 11 32 53 74 9列表推导式a=[' asdf ','asdg ',' gfs']b=[w.strip() for w in a] #等价于b=list(map(str.strip,a))print(b) 答案:['asdf', 'asdg', 'gfs']vec=[[1,2,3],[3,4,5],[6,7,8]]print(vec)ans=[w for i in vec for w in i]print(ans)答案:[[1, 2, 3], [3, 4, 5], [6, 7, 8]][1, 2, 3, 3, 4, 5, 6, 7, 8]过滤不符合条件的元素import os# 返回当前的python文件name=[w for w in os.listdir() if 'py' in w]print(name)答案:['deal_sort.py', 'deal_zip.py', 'ex1.py', 'read_csv or xlsx.py', 'read_file.py'] 上面等价于:
import os # 返回当前的python文件 # name=[w for w in os.listdir() if 'py' in w] def f(x): return 'py' in x name=list(filter(f,os.listdir('.'))) print(name)
[[x,y] for x in range(3) for y in range(3)]
答案:[[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
字典操作key=[chr(i) for i in range(97,100)]value=[i for i in range(97,100)]print(dict(zip(key,value)))答案:{ 'b': 98, 'a': 97, 'c': 99}通过‘’键值对‘’来创建字典dict(a=1,b=2,c=3) 答案:{ 'a': 1, 'b': 2, 'c': 3}a=dict(a=1,b=2,c=3)a.get('a') #更加安全的字典元素访问方式答案:1a['a']答案: 1返回字典的键和值a.keys()答案:dict_keys(['b', 'c', 'a'])a.values()答案:dict_values([2, 3, 1])字典添加和修改a['age']=19 若该键不存在,则创建,否则修改a.update({ 'a':a,'b',b})对全部添加到a中,一样的键进行更新 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。str.join(sequence)a='asdfasd''*.'.join(a)答案:'a*.s*.d*.f*.a*.s*.d'import randomrandom.choice(list(range(5)))#随机选一个元素有序字典import collectionsx=collections.OrderedDict()x['a']=1x['b']=2x['c']=3print(x)答案:OrderedDict([('a', 1), ('b', 2), ('c', 3)])集合运算a=set(range(5))b=set(range(3,8))print(a|b) #并print(a&b) #交print(a-b) #差print(a^b) #对称差答案:{0, 1, 2, 3, 4, 5, 6, 7}{ 3, 4}{0, 1, 2}{0, 1, 2, 5, 6, 7}判断子集a={1,2,3}b={1,2,3,4}print(a.issubset(b))答案:True
>>> 'a' in 'fdaaf'True#startswith endswith 判断是否以指定字符串开始或结束s='中国人'print(s.startswith('中国'))print(s.startswith('中国',1))#从位置1开始查找答案:TrueFalse#它们还可以接受一个字符串元组作为参数来表示前缀或后缀import osname=[filename for filename in os.listdir(r'C:\Users\Administrator\Desktop') if filename.endswith(('.png','.jpg'))]print(name)答案:['0.jpg', '1484393555(1).png', '1484574032(1).png', '1484574235(1).png', '1484575013(1).png', '1484575722(1).png', '1487164690(1).png', '16110180021Qunxi Zhu.png', '532c0ed.png', '5807228.png', 'QQ图片20161212133524.jpg']isalnum,isalpha,isdigit,isspace,isupper,islower测试字符串是否数字或字母,是否为字母,是否为数字字符,是否为空白字符是否为答谢字母,是否为小写字母字符串居中,左对齐,右对齐centr,ljust,rjusts='Hello world!'print(s.center(20))print(s.center(20,'='))print(s.ljust(20,'='))print(s.rjust(20,'='))答案: Hello world! ====Hello world!====Hello world!================Hello world!带有默认值参数的函数def f(a,b=100): return a+bprint(f(1))print(f(1,2))答案:1013>>> ['asd ']*3['asd ', 'asd ', 'asd ']>>> 'asd'*3'asdasdasd'>>> ('asd ')*3'asd asd asd '字典,列表作为默认参数值时,要特别小心def f(a,L=[]): L.append(a) return Lprint(f('5',[1,2,3,4]))print(f('aaa',['a','b']))print(f('a'))print(f('b'))答案:[1, 2, 3, 4, '5']['a', 'b', 'aaa']['a']['a', 'b'] #在原来基础上加上了'b'def f(a,L=None): if L is None: L=[] L.append(a) return Lprint(f('5',[1,2,3,4]))print(f('aaa',['a','b']))print(f('a'))print(f('b')) #变成'b'答案:[1, 2, 3, 4, '5']['a', 'b', 'aaa']['a']['b']参数传递时,序列解包def f(a,b,c): print(a+b+c)f(*[1,2,3])dic={ 1:'a',2:'b',3:'c'}f(*dic) #默认键f(*dic.values())hahaha并不一定要selfclass H: def __init__(hahaha,v): hahaha.value=v def show(hahaha): print(hahaha.value)a=H(3)a.show()答案:3