# 容器 List
xs =[3,1,2]print(xs, xs[2])print(xs[-1])
xs[2]='foo'print(xs)
xs.append('bar')print(xs)
x = xs.pop()print(x, xs)# 切片slicing
nums =list(range(5))print(nums)print(nums[2:4])print(nums[2:])print(nums[:2])print(nums[:])print(nums[:-1])
nums[2:4]=[8,9]print(nums)
animals =['cat','dog','monkey']for animal in animals:print(animal)
animals =['cat','dog','monkey']for idx, animal inenumerate(animals):print('#%d: %s'%(idx +1, animal))
nums =[0,1,2,3,4]
squares =[x **2for x in nums]print(squares)
nums =[0,1,2,3,4]
even_squares =[x **2for x in nums if x %2==0]print(even_squares)# dictionary 类似Map哈希表
d ={'cat':'cute','dog':'furry'}print(d['cat'])print('cat'in d)
d['fish']='wet'print(d['fish'])# print(d['monkey']) # KeyError: 'monkey' not a key of dprint(d.get('monkey','N/A'))print(d.get('fish','N/A'))del d['fish']print(d.get('fish','N/A'))
d ={'person':2,'cat':4,'spider':8}for animal in d:
legs = d[animal]print('A %s has %d legs'%(animal, legs))
d ={'person':2,'cat':4,'spider':8}for animal, legs in d.items():print('A %s has %d legs'%(animal, legs))
nums =[0,1,2,3,4]
even_num_to_square ={x: x **2for x in nums if x %2==0}print(even_num_to_square)# Set 集合,不同元素的无序集合
animals ={'cat','dog'}print('cat'in animals)# 是否存在print('fish'in animals)
animals.add('fish')print('fish'in animals)print(len(animals))
animals.add('cat')print(len(animals))
animals.remove('cat')print(len(animals))# 与列表相似
animals ={'cat','dog','fish'}for idx, animal inenumerate(animals):print('#%d: %s'%(idx +1, animal))from math import sqrt
nums ={int(sqrt(x))for x inrange(30)}print(nums)# Tuples 不可变的, 可以用作字典中的键和集合的元素
d ={(x, x +1): x for x inrange(10)}
t =(5,6)print(type(t))print(d[t])print(d[(1,2)])# 函数defsign(x):if x >0:return'positive'elif x <0:return'negative'else:return'zero'for x in[-1,0,1]:print(sign(x))# 可选参数defhello(name, loud=False):if loud:print('HELLO, %s!'% name.upper())else:print('Hello, %s'% name)
hello('Bob')
hello('Fred', loud=True)classGreeter(object):def__init__(self, name, Class):
self.name = name
self.Class = Class
defgreet(self, loud =False):if loud:print("HELLO,%s, %s"%(self.name.upper(), self.Class))else:print("Hello,%s"%self.name)
g = Greeter("Fred","kk")
g.greet()
g.greet(loud =True)# Numpy import numpy as np
a = np.array([1,2,3])# (3,)#a = np.array([[1], [2], [3]]) #(3, 1)print(type(a))print(a.shape)print(a[0], a[1], a[2])
a[0]=5print(a)
b = np.array([[1,2,3],[4,5,6]])print(b.shape)print(b[0,0], b[0,1], b[0,2])
a = np.zeros((2,2))print(a)
b = np.ones((1,2))print(b)
c = np.full((2,2),7)print(c)
d = np.eye(2)print(d)
e = np.random.random((2,2))print(e)
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])print(a)
b = a[:2,1:3]print(b)# 修改切片即修改本身print(a[0,1])
b[0,0]=77print(a[0,1])#一种索引
a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])print(a)
b = np.arange(3)print(a[b, b])#布尔索引
a = np.array([[1,2],[3,4],[5,6]])print(a)
bool_idx =(a >2)print(bool_idx)print(a[bool_idx])print(a[a >2])
x = np.array([1,2])# Let numpy choose the datatypeprint(x.dtype)# Prints "int64"
x = np.array([1.0,2.0])# Let numpy choose the datatypeprint(x.dtype)# Prints "float64"
x = np.array([1,2], dtype=np.int64)# Force a particular datatypeprint(x.dtype)# Prints "int64"print(type(x))
x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)print(x + y)print(np.add(x, y))print(x - y)print(np.subtract(x, y))print(x * y)print(np.multiply(x, y))print(x / y)print(np.divide(x, y))print(np.sqrt(x))
x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])
v = np.array([9,10])
w = np.array([11,12])# Inner product of vectors; both produce 219print(v.dot(w))print(np.dot(v, w))# Matrix / vector product; both produce the rank 1 array [29 67]print(x.dot(v))print(np.dot(x, v))# Matrix / matrix product; both produce the rank 2 array# [[19 22]# [43 50]]print(x.dot(y))print(np.dot(x, y))
a = np.array([[1,2],[3,4]])print(np.sum(a))print(np.sum(a, axis =0))print(np.sum(a, axis =1))print(a.T)# Note that taking the transpose of a rank 1 array does nothing:
v = np.array([1,2,3])print(v)# Prints "[1 2 3]"print(v.T)# Prints "[1 2 3]"
x = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
v = np.array([1,0,1])
y = np.empty_like(x)# Create an empty matrix with the same shape as xfor i inrange(4):
y[i,:]= x[i,:]+ v
print(y)#堆叠向量成矩阵,避免显式循环耗时
vv = np.tile(v,(4,1))print(vv)
y = x + vv
print(y)# Numpy广播允许我们执行此计算而无需实际创建多个副本v。考虑这个版本,使用广播:
x = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
v = np.array([1,0,1])
y = x + v # Add v to each row of x using broadcastingprint(y)# Compute outer product of vectors
v = np.array([1,2,3])# v has shape (3,)
w = np.array([4,5])# w has shape (2,)print(np.reshape(v,(3,1))* w)
x = np.array([[1,2,3],[4,5,6]])print(x + v)print((x.T + w).T)print(x + np.reshape(w,(2,1)))print(x *2,"------------")from imageio import imread, imsave
from PIL import Image
#from scipy.misc import imresize
img = imread("whq.JPG")print(img.dtype, img.shape)
img_m = img *[1,0.95,0.9]#print(img_m.dtype, img_m.shape) # float64 (370, 250, 3)
img_m = np.array(Image.fromarray(np.uint8(img_m)).resize((300,300)))#img_m = imsave(img_m, )
imsave('kk.jpg', img_m)# 点之间的距离from scipy.spatial.distance import pdist, squareform
x = np.array([[0,1],[1,0],[2,0]])print(x)
d = squareform(pdist(x,'euclidean'))print(d)# Matplotlibimport matplotlib.pyplot as plt
x = np.arange(0,3* np.pi,0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)
plt.plot(x, y_sin)
plt.plot(x, y_cos)
plt.xlabel('x axis label')
plt.ylabel('y axis label')
plt.title('Sine and Cosine')
plt.legend(['Sine','Cosine'])
plt.show()
plt.subplot(2,1,1)
plt.plot(x, y_sin)
plt.title("Sine")
plt.subplot(2,1,2)
plt.plot(x, y_cos)
plt.title("Cos")
plt.show()from imageio import imread, imsave
from PIL import Image
img = imread("whq.JPG")
img_m = img *[1,0.95,0.9]
plt.subplot(1,2,1)
plt.imshow(img)
plt.subplot(1,2,2)
plt.imshow(np.uint8(img_m))
plt.show()
import numpy as np
defadd(x, y, f):return f(x)+ f(y)print(add(1,-2, np.sin))deff(x):return x * x
r =map(f,[1,2,3,4,5,6,7,8,9])print(list(r))defadd(x, y):return x + y
from functools importreduceprint(reduce(add,[1,2,3,4,5]))defnormalize(name):return name.title()
L1 =['adam','LISA','barT']
L2 =list(map(normalize, L1))print(L2)
a =[3,-2,1]
b =sorted(a)
b =sorted(a, key =abs)print(b)sorted(['bob','about','Zoo','Credit'])sorted(['bob','about','Zoo','Credit'], key =str.lower)sorted(['bob','about','Zoo','Credit'], key =str.lower, reverse =True)sorted(['bob','about','Zoo','Credit'], reverse =True)defproduct(*nums):sum=1for num in nums:sum*= num
returnsumprint('product(5) =', product(5))print('product(5, 6) =', product(5,6))print('product(5, 6, 7) =', product(5,6,7))print('product(5, 6, 7, 9) =', product(5,6,7,9))if product(5)!=5:print('测试失败!')elif product(5,6)!=30:print('测试失败!')elif product(5,6,7)!=210:print('测试失败!')elif product(5,6,7,9)!=1890:print('测试失败!')else:try:
product()print('测试失败!')except TypeError:print('测试成功!')deftrim(s):if s[:1]!=" "and s[-1:]!=" ":return s
elif s[:1]==" ":return trim(s[1:])else:return trim(s[:-1])if trim('hello ')!='hello':print('测试失败1!')elif trim(' hello')!='hello':print('测试失败2!')elif trim(' hello ')!='hello':print('测试失败3!')elif trim(' hello world ')!='hello world':print('测试失败4!')elif trim('')!='':print('测试失败5!')elif trim(' ')!='':print('测试失败6!')else:print('测试成功!')
mi =1e9
ma =-1e9deffindMinAndMax(L):global mi, ma
for l in L:
mi =min(mi, l)
ma =max(ma, l)return(mi, ma)print(findMinAndMax([1,2,3,4,5,6,7,8,9]))print(mi, ma)
L1 =['Hello','World',18,'Apple',None]
L2 =[s.lower()ifisinstance(s,str)else s for s in L1]# if else表达式
L3 =[s.lower()for s in L1 ifisinstance(s,str)]# if过滤print(L2, L3)# 生成器 边循环边计算,保存的是算法 [] -> ()
L =(x **2for x inrange(10))print(next(L))print(next(L),"-----")for i in L:print(i)defodd():print('step 1')yield1print('step 2')yield(3)print('step 3')yield(5)
o = odd()next(o)next(o)next(o)deffib(max):
n, a, b =0,0,1while n <max:yield b
a, b = b, a + b
n = n +1return'done'for i in fib(6):print(i)
f = fib(6)print(f)
g = fib(6)whileTrue:try:
x =next(g)print('g:', x)except StopIteration as e:print('Generator return value:', e.value)break# 杨辉三角生成器deftriangles():
L =[1]whileTrue:yield L
L =[L[i]+ L[i +1]for i inrange(len(L)-1)]#先生成除首位的数字
L.insert(0,1)#list开头添加 1
L.append(1)#list结尾添加 1
n =0
results =[]for t in triangles():
results.append(t)
n = n +1if n ==10:breakfor t in results:print(t)
t = triangles()print(next(t))print(next(t))print(next(t))print(next(t))defziran():
a =1whileTrue:yield a
a +=1
zz = ziran()print(next(zz))print(next(zz))print(next(zz))from collections.abc import Iterable
from collections.abc import Iterator
print(isinstance([], Iterable))print(isinstance("abc", Iterator))print(isinstance(iter('abc'), Iterator))#凡是可作用于for循环的对象都是Iterable类型;#凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列#集合数据类型如list、dict、str等是Iterable但不是Iterator#不过可以通过iter()函数获得一个Iterator对象。classStudent(object):pass
bart = Student()
bart.name ="whq"print(bart.name)classStu(object):def__init__(self, name, age):
self.__name = name
self.__age = age
defprint_stu(self):print("%s : %d"%(self.__name, self.__age))
bart = Stu("Michael",12)#print(bart.__name, bart.__age) #private 错误#print(bart._Stu__name) # 不建议,private实现机制,python解释器对外将变量名改变从而无法访问
bart.print_stu()# 继承和多态classAnimal(object):defrun(self):print("Animal is running----")classDog(Animal):# 可直接代码复用pass也行,也可重新定义函数进行覆盖defrun(self):print("the dog is running---")classTimer(object):defrun(self):print('Start...')
a = Animal()
dog = Dog()
dog.run()print(isinstance(dog, Dog))# Trueprint(isinstance(dog, Animal))# Trueprint(isinstance(a, Dog))# False 子类可判断为父类,父类不能判断为子类# type() 得到直接对应的类print(type(a))print(type(dog))defrun_twice(Animal):
Animal.run()
Animal.run()# 传入实例
run_twice(Animal())
run_twice(Dog())
run_twice(Timer())# python动态语言:不一定是Animal类型,有run()方法即可 java静态# 对于一个变量,我们只需要知道它是Animal类型,无需确切地知道它的子类型# 就可以放心地调用run()方法,而具体调用的run()方法是作用在Animal、Dog对象上# 由运行时该对象的确切类型决定,这就是多态真正的威力print(isinstance([1,2,3],(list,tuple)))# 其中一种print(isinstance((1,2,3),(list,tuple)))# 总结:总是优先使用isinstance()判断类型,可以将指定类型及其子类“一网打尽”。dir("ABC")#print(dir("ABC"))print(len("ABC"),"ABC".__len__())classStudent1(object):
name ="Student"
s = Student1()print(s.name)# Student 类属性
s.name ="Michael"print(s.name)# Michael 屏蔽类属性,用实例属性
t = Student1()print(t.name)# Student del s.name
print(s.name)# Student 类属性try:print('try...')
r =10/int('a')# r = 10 / int('a', 16) # okprint('result:', r)except ValueError as e:print('ValueError:', e)except ZeroDivisionError as e:print('ZeroDivisionError:', e)else:print('no error!')finally:print('finally...')print('END')