每天一天笔记也好文章也好,感觉还是要求挺高的,写的没点干货也挺难堪的,代码本来就是业余的事情,想写点干货对自己是个既有风险又有挑战的事情,而且写一些干货要有大量的准备工作,自己做不到;但不写心又不甘,一旦放松了就很难再严格要求自己了,所以只能想到哪里写到哪里。
学的写的也并非对工作毫无帮助,比如前两年困扰我的爬取出来百度小区地址和宽带用户表里的九级地址,每种地址都有几万行,靠人力去核对,除非傻子才会干,所以这项工作迟迟无法取得进展,宽带的营销成功率不高,80%与此有关,现在好了,可以通过地址分词后的相似度来解决,虽然没有形成最终的代码,但至少论证了这个可行性。
闲话少说,python内置了许多数据类型,list,tuple,dict,set,很少系统的去看一下他们的初始化、切片、迭代访问、函数、方法等等,今天等于回顾了一下。
详见代码
代码语言:javascript复制#--------------------------list-------------------------
#list为python内置数据类型,array为numpy类型
print('--------------------------list--------------------------')
#--------------------------init--------------------------
a = ['physics', 'chemistry', 1997, 2000] #[]定义,可以定义不同数据类型
b = [1, 2, 3, 4, 5 ] #[]定义,使用相同类型数据
c = ["a", "b", "c", "d"] #[]定义,使用相同类型数据
d = list(x for x in range(0,10)) #list range实例化定义
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
e = [x for x in range(10)] #[] range定义
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
f = [x*x for x in range(10)] #[] range定义
#[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
g = [[ x for x in range(10)],[y for y in range(10)]] #定义二维数组list
#[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
h = [1,2,3,4,5] #初始化数组
#[1, 2, 3, 4, 5]
i = h*3 #在一维数组上追加不同列
#[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
j = [h]*3 #在一维数组上追加不同行,即不同维
#[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
list1 = [m n for m in 'abc' for n in 'xyz'] #生成排列组合
#['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']
list1 = [m n for m in range(3) for n in range(4)] #生成排列组合
#[0, 1, 2, 3, 1, 2, 3, 4, 2, 3, 4, 5]
#['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']
#--------------------------iter--------------------------
for step in a:
print(step)
for i in range(len(a)):
print(a[i])
for index, name in enumerate(a):
print (index," ",name)
#--------------------------slice-------------------------
k = [1, 2, 3, 4, 5 ,6,7,8,9,10]
print('k=',k)
print('k[0]=',k[0])
#k[0]= 1
print('k[0:5]=',k[0:5])
#k[0:5]= [1, 2, 3, 4, 5]
print('k[:5]=',k[:5])
#k[:5]= [1, 2, 3, 4, 5]
print('k[5:]=',k[5:])
#k[5:]= [6, 7, 8, 9, 10]
print('k[:]=',k[:])
#k[:]= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print('k[1:9]=',k[1:9])
#k[1:9]= [2, 3, 4, 5, 6, 7, 8, 9]
print('k[1:9:2]=',k[1:9:2])
#k[1:9:2]= [2, 4, 6, 8]
print('k[9:1:-1]=',k[9:1:-1])
#k[9:1:-1]= [10, 9, 8, 7, 6, 5, 4, 3]
print('k[9:0:-1]=',k[9:0:-1])
#k[9:0:-1]= [10, 9, 8, 7, 6, 5, 4, 3, 2]
print('k[:0:-1]=',k[:0:-1])
#k[:0:-1]= [10, 9, 8, 7, 6, 5, 4, 3, 2]
print('k[::-1]=',k[::-1])
#k[::-1]= [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
print('k[9:0:-2]=',k[9:0:-2])
#k[9:0:-2]= [10, 8, 6, 4, 2]
#--------------------------func--------------------------
m = [1,2,3]
n = [4,5,6,7]
print('len(m)=',len(m)) #3
print('max(m)=',max(m))
print('min(m)=',min(m))
#python3已取消cmp函数,通过operator模块替代
#lt(a,b)相当于a<b 从第一个数字或字母(ASCII)比大小
#le(a,b)相当于a<=b
#eq(a,b)相当于a==b 字母完全一样,返回True,
#ne(a,b)相当于a!=b
#gt(a,b)相当于a>b
#ge(a,b)相当于a>=b
import operator
print('operator.ne(m,n)=',operator.ne(m,n))
print('operator.lt(m,n)=',operator.lt(m,n))
print('operator.le(m,n)=',operator.le(m,n))
print('operator.eq(m,n)=',operator.eq(m,n))
print('operator.gt(m,n)=',operator.gt(m,n))
print('operator.ne(m,n)=',operator.ne(m,n))
#--------------------------oper--------------------------
#1 list.append(obj) 在列表末尾添加新的对象
#2 list.count(obj) 统计某个元素在列表中出现的次数
#3 list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
#4 list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
#5 list.insert(index, obj) 将对象插入列表
#6 list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
#7 list.remove(obj) 移除列表中某个值的第一个匹配项
#8 list.reverse() 反向列表中元素
#9 list.sort(cmp=None, key=None, reverse=False) 对原列表进行排序
o = [1,2,3,4,5]
p = [6,7]
v=o p
print('o p=',v)
#[1, 2, 3, 4, 5, 6, 7]
o.extend(p)
print('after extend,o=',o)
#extend等同于
#o= [1, 2, 3, 4, 5, 6, 7]
o.append(p)
print('after append o=',o)
#o= [1, 2, 3, 4, 5, 6, 7, [6, 7]]
#extend和append是不同的,一个是加元素,一个是加序列
print('o.count(6)=',o.count(6)) #1
#在指定位置增加元素
o.insert(len(o),p)
print('after insert o=',o)
#after insert o= [1, 2, 3, 4, 5, 6, 7, [6, 7], [6, 7]]
r=o.index([6, 7])
print('o.index([6, 7])=',o.index([6, 7])) #7
r=o.pop()
print('after pop o=',o,'return =',r)
#after pop o= [1, 2, 3, 4, 5, 6, 7, [6, 7]] return = [6, 7]
r=o.pop(3)
print('after pop o=',o,'return =',r)
#after pop o= [1, 2, 3, 5, 6, 7, [6, 7]] return = 4
r=o.remove(3)
print('after remove o=',o)
#after remove o= [1, 2, 5, 6, 7, [6, 7]]
o.reverse()
print('after reverse o=',o)
#after reverse o= [[6, 7], 7, 6, 5, 2, 1]
#sort()方法要保证各元素数据类型的一致性
s = [1,3,2,6,9,7,4]
s.sort()
print('after sort() s=', s)
#after sort() s= [1, 2, 3, 4, 6, 7, 9]
s.sort(reverse=True)
print('after sort(reverse=True) s=',s)
#after sort(reverse=True) s= [9, 7, 6, 4, 3, 2, 1]
a = [(2, 2), (3, 4), (4, 1), (1, 3)]
a.sort(key=lambda y:y[0])
print('after a.sort(key=lambda y:y[0]) a=', a)
#after a.sort(key=lambda y:y[0]) a= [(1, 3), (2, 2), (3, 4), (4, 1)]
a.sort(key=lambda y:y[1])
print('after a.sort(key=lambda y:y[1]) a=', a)
#after a.sort(key=lambda y:y[1]) a= [(4, 1), (2, 2), (1, 3), (3, 4)]
#sort支持正逆排序,也支持key方式,同样key支持lambda方式
#--------------------------tuple-------------------------
#Python 的元组与列表类似,不同之处在于元组的元素不能修改。
print('--------------------------tuple-------------------------')
#--------------------------init--------------------------
a = ('Google', 'Runoob', 1997, 2000)
b = (1, 2, 3, 4, 5 )
c = 1, 2, 3, 4, 5
d = ("a", "b", "c", "d")
e = "a", "b", "c", "d"
f= ['Google', 'Taobao', 'Runoob', 'Baidu']
g=tuple(f)
h = (50)
print(type(h)) #<class 'int'>
h = (50,)
print(type(h)) #<class 'tuple'>
#--------------------------slice-------------------------
#tuple的切片和list也是一样的
k = (1, 2, 3, 4, 5 ,6,7,8,9,10)
print('k=',k)
print('k[0]=',k[0])
#k[0]= 1
print('k[0:5]=',k[0:5])
#k[0:5]= [1, 2, 3, 4, 5]
print('k[:5]=',k[:5])
#k[:5]= [1, 2, 3, 4, 5]
print('k[5:]=',k[5:])
#k[5:]= [6, 7, 8, 9, 10]
print('k[:]=',k[:])
#k[:]= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print('k[1:9]=',k[1:9])
#k[1:9]= [2, 3, 4, 5, 6, 7, 8, 9]
print('k[1:9:2]=',k[1:9:2])
#k[1:9:2]= [2, 4, 6, 8]
print('k[9:1:-1]=',k[9:1:-1])
#k[9:1:-1]= [10, 9, 8, 7, 6, 5, 4, 3]
print('k[9:0:-1]=',k[9:0:-1])
#k[9:0:-1]= [10, 9, 8, 7, 6, 5, 4, 3, 2]
print('k[:0:-1]=',k[:0:-1])
#k[:0:-1]= [10, 9, 8, 7, 6, 5, 4, 3, 2]
print('k[::-1]=',k[::-1])
#k[::-1]= [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
print('k[9:0:-2]=',k[9:0:-2])
#k[9:0:-2]= [10, 8, 6, 4, 2]
#--------------------------func--------------------------
m = (1,2,3)
n = (4,5,6,7)
print('len(m)=',len(m)) #3
print('max(m)=',max(m))
print('min(m)=',min(m))
#python3已取消cmp函数,通过operator模块替代
#lt(a,b)相当于a<b 从第一个数字或字母(ASCII)比大小
#le(a,b)相当于a<=b
#eq(a,b)相当于a==b 字母完全一样,返回True,
#ne(a,b)相当于a!=b
#gt(a,b)相当于a>b
#ge(a,b)相当于a>=b
import operator
print('operator.ne(m,n)=',operator.ne(m,n))
print('operator.lt(m,n)=',operator.lt(m,n))
print('operator.le(m,n)=',operator.le(m,n))
print('operator.eq(m,n)=',operator.eq(m,n))
print('operator.gt(m,n)=',operator.gt(m,n))
print('operator.ne(m,n)=',operator.ne(m,n))
#--------------------------iter--------------------------
#tuple的迭代和list是完全一样的
for step in a:
print(step)
for i in range(len(a)):
print(a[i])
for index, name in enumerate(a):
print (index," ",name)
#--------------------------oper--------------------------
#tuple无法修改元祖,因此少了很多方法
o = (1,2,2,3,4,5)
p = (6,7)
v=o p
print('o p=',v)
#[1, 2, 3, 4, 5, 6, 7]
print('o.count(2)=',o.count(2)) #2
r=o.index(3)
print('o.index(3)=',o.index(3)) #3
s = (1,3,2,6,9,7,4)
a = sorted(s)
print('after sorted() new tuple=', a)
#after sorted() new tuple= [1, 2, 3, 4, 6, 7, 9]
print('after sorted() new old=', s)
#after sorted() new old= (1, 3, 2, 6, 9, 7, 4)
a=sorted(s,reverse=True)
print('after sorted(reverse=True) new_tuple=',a)
#aafter sorted(reverse=True) new_tuple= [9, 7, 6, 4, 3, 2, 1]
s = ((2, 2), (3, 4), (4, 1), (1, 3))
a =sorted(s,key=lambda y:y[0])
print('s=',s)
print('after sorted(key=lambda y:y[0]) a=', a)
#after sorted(key=lambda y:y[0]) a= [(1, 3), (2, 2), (3, 4), (4, 1)]
a =sorted(s,key=lambda y:y[1])
print('after sorted(key=lambda y:y[1]) a=', a)
#after sorted(key=lambda y:y[1]) a= [(4, 1), (2, 2), (1, 3), (3, 4)]
#tuple不支持增删改排序,但排序可以通过sorted复制达到目标,不过会转成list类型
#--------------------------set---------------------------
print('--------------------------set---------------------------')
#--------------------------init--------------------------
a = {'Mary', 'Jim', 'Rose', 'Jack', 'Tom'} #{'Jim', 'Tom', 'Jack', 'Mary', 'Rose'}
b = {1,2,3,4} #{1, 2, 3, 4}
c=set('abracadabra') #{'a', 'd', 'b', 'c', 'r'}
d=set('alacazam') #{'a', 'l', 'z', 'c', 'm'}
e=set([12345,1234,123,12,1]) #{1, 12, 1234, 12345, 123}
f=set((12345,1234,123,12,1)) #{1, 12, 1234, 12345, 123}
#--------------------------slice-------------------------
#集合没有下标,顺序,所以不支持切片
#--------------------------iter--------------------------
#集合不支持下标式访问,只能遍历
for one in a:
print(one)
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])
for x in s:
print(x[0] ' ', x[1])
#--------------------------func--------------------------
print('c=',c)
#c= {'d', 'c', 'a', 'b', 'r'}
print('d=',d)
#d= {'l', 'a', 'c', 'z', 'm'}
print('c - d=',c - d) # a和b的差集
#c - d= {'r', 'd', 'b'}
print('c | d=',c | d) # a和b的并集
#c | d= {'l', 'b', 'a', 'r', 'd', 'c', 'z', 'm'}
print('c & d=',c & d) # a和b的交集
#c & d= {'c', 'a'}
print('c ^ d=',c ^ d) # a和b中不同时存在的元素
#c ^ d= {'l', 'r', 'b', 'd', 'z', 'm'}
#--------------------------oper--------------------------
a={1,2,3}
b={4,5}
c=6
a.add(c)
print('after a.add(c)=',a)
#after a.add(c)= {1, 2, 3, 6}
a.update(b)
print('after a.update(b)=',a)
#after a.update(b)= {1, 2, 3, 4, 5, 6}
#add只能是元素,update参数可以是列表,元组,字典
a.remove(c)
print('after a.remove(c)=',a)
#after a.remove(c)= {1, 2, 3, 4, 5}
a.discard(7)
print('after a.discard(7)=',a)
#after a.discard(7)= {1, 2, 3, 4, 5}
#remove和discard均为删除元素,不过当要删除的值不在集合中时,discard不会报错
a.clear()
print('after a.clear()=',a)
#after a.clear()= set()
#--------------------------dict--------------------------
#字典是另一种可变容器模型,且可存储任意类型对象。
print('--------------------------dict--------------------------')
#--------------------------init--------------------------
a = {'a':1,'b':2,'c':3}
b = dict({'a':1, 'b':2, 'c':3})
c = dict([('a',1), ('b', 2), ('c', 3)])
d = dict((('a',1), ('b', 2), ('c', 3)))
e = dict([['a',1], ['b', 2], ['c', 3]])
f = dict((['a',1], ['b', 2], ['c', 3]))
g = dict(a=1, b=2, c=3)
h = dict(zip(['a', 'b', 'c'], [1,2,3]))
print(a,b,c,d,e,f,g,h)
#--------------------------slice-------------------------
print('a["a"]=',a['a'])
#a["a"]= 1
#--------------------------iter--------------------------
for i in a.items():
print(i)
for i in a.items():
print(i[0],' ',i[1])
for key,value in a.items():
print(key,' ',value)
for (key,value) in a.items():
print(key,' ',value)
for key in a:
print(key ' ' str(a[key]))
for key in a.keys():
print(key ' ' str(a[key]))
for value in a.values():
print(value)
#--------------------------func--------------------------
a = {'a':1,'b':2,'c':3}
b = {'d':4,'e':5}
c = {'c':4,'f':6}
d = {'g':7,'h':8,'i':9}
del d['g'] # {'h': 8, 'i': 9}
d.clear() # {}
del d # 删除字典
print(len(a)) #3
print(str(a)) #{'a': 1, 'b': 2, 'c': 3}
#--------------------------oper--------------------------
dict = {'Name': 'Runoob', 'Age': 27}
print ("Age 值为 : %s" % dict['Age']) #Age 值为 : 27
print ("Age 值为 : %s" % dict.get('Age')) #Age 值为 : 27
print ("Sex 值为 : %s" % dict.get('Sex')) #Sex 值为 : None
print ("Sex 值为 : %s" % dict.get('Sex', "NA")) #Sex 值为 : NA
print('dict.keys()=',dict.keys()) #dict.keys()= dict_keys(['Name', 'Age'])
print('dict.keys()=',list(dict.keys())) #dict.keys()= ['Name', 'Age']
print('dict.values()=',dict.values()) #dict.values()= dict_values(['Runoob', 27])
print('dict.values()=',list(dict.values())) #dict.values()= ['Runoob', 27]
print('dict.pop(Name)=',dict.pop('Name')) #dict.pop(Name)= Runoob
print('after dict.pop(Name)=',dict) #after dict.pop(Name)= {'Age': 27}
x = ('key1', 'key2', 'key3')
a = dict.fromkeys(x) #a= {'key1': None, 'key2': None, 'key3': None}
b = dict.fromkeys(x,10) #b= {'key1': 10, 'key2': 10, 'key3': 10}
dict = {'Name': 'Runoob', 'Age': 7}
dict2 = {'Sex': 'female'}
dict.update(dict2)
print("after dict.update(dict2) dict=", dict) #after dict.update(dict2) dict= {'Name': 'Runoob', 'Age': 7, 'Sex': 'female'}