############字符串
创建字符串
str1 = 'abc'
print(str1) ##abc
str2 = str('efg')
print(str2) ##efg
######上面两种创建方法等同
"" '' 在python中单引号和双引号效果一样
'''
''' 注释
'''
''' 段落
字符串格式化
字符串是%s ;整数是%d;浮点数%f
print("you information: age %d,sex %s,record %0.2f"%(28,'Male',87.5))
字符串常用功能
移除空白 .strip() 去除前后的内容
分割 split
长度 len(obj)
索引 obj[2]
切片 obj[1:10]
每个字符串有如下功能
1 ''' 2 name = 'eric' 3 result = name.capitalize() ##首字母大写 4 print(result) ## Eric 5 ''' 6 ''' 7 name = 'eric' 8 result = name.center(20,'*') ###居中,并以* 填充左右。20表示宽度。填充字符加上字符串一起20个 9 print(result) ######********eric******** 10 ''' 11 ''' 12 name = 'sfsdfsdfsfisjfisdnisdng' 13 result = name.count('d') ###找子系列出现的次数 14 result1 = name.count('s',0,2) ###找子系列出现的次数,从第0到第2的位置.字符串的编号从0开始 范围是0<=a<2 15 print(result) ##4 16 print(result1) ##1 17 ''' 18 ''' 19 name = '李杰' 20 result = name.encode('gbk') ###编码变更 21 print(result) #b'xc0xeexbdxdc' 22 ''' 23 ''' 24 name = 'alex' 25 result = name.endswith('e') ##是否是以某个子系列结尾的 26 print(result) # false 27 ''' 28 29 ''' 30 name = 'alex' 31 result = name.endswith('e') ##是否是以某个子系列结尾的 32 result1 = name.endswith('x',0,4) # 0<=a<3 33 print(result) # false 34 print(result1) # true 35 ''' 36 37 ''' 38 name = 'a lex' 39 result = name.expandtabs() ##tab 换成空格, 一个tab算8个空格;结果有待探讨 40 print(result) ###a lex 41 print(len(result)) ##7 42 ''' 43 ''' 44 name = 'alex' 45 result = name.find('a') ##找a字符在字符串alex 在第几个位置,还可以设置起始和结束位置;找不到返回-1 46 result1 = name.index('a') ##找a字符在字符串alex 在第几个位置,还可以设置起始和结束位置;找不到,就程序报错 47 print(result) ###0 48 print(result1) ###0 49 ''' 50 ''' 51 name = 'alex {0} as {1}' 52 result = name.format('sb','eric') ##格式化,sb 以参数的形式传到上的{0}中 53 print(result) ###alex sb as eric 54 55 name = 'alex {name} as {id}' 56 result = name.format(name='sb',id='eric') ##格式化,动态传参数 57 print(result) ###alex sb as eric 58 ''' 59 ''' 60 li = ['s','b','a','l','e','x'] 61 result = "".join(li) ###将li 列表拼接 62 result1 = "_".join(li) ##将li 以下划线拼接 63 print(result) ##sbalex 64 print(result1) ##s_b_a_l_e_x 65 ''' 66 67 ###ljust rjust ##和center类似 68 69 ###lstrip ##去掉左边 70 71 ### 72 ''' 73 name = 'alexissb' 74 result = name.partition('is') ##以is 做分割 75 result1 = name.replace('a','o') ## 做字符的替换,可以加数字,替换几个 76 print(result) ##('alex', 'is', 'sb') 77 print(result1) ##('alex', 'is', 'sb') 78 ''' 79 80 ###rfind 从左往右找。凡是加r的方法,是从左往右执行 81 ###swapcase 大小写全部转换 82 ###titile 所有单词的 第一个字母变大写 83 ####upper ###小写转为大写
###列表
1 ''' 2 li1 = list([1,2,3,4]) 3 print(li1) 4 li2 = [1,2,3,4] 5 print(li2) 6 ###创建列表的两种方式 7 ''' 8 9 ''' 10 li1 = list([1,2,3,4]) 11 li1.insert(0,'alex') ##insert 插入;具体在哪个位置插入 12 print(li1) ###['alex', 1, 2, 3, 4] 13 ''' 14 ''' 15 li1 = list([1,2,3,4]) 16 li1.extend([11,22]) ##extend 扩展,自动放到最后 17 print(li1) ##[1, 2, 3, 4, 11, 22] 18 ''' 19 ''' 20 li1 = list([1,2,3,4,8,5]) 21 li1.append(10) ##append 追加,在最后追加一个字符 22 print(li1) ##[1, 2, 3, 4, 8, 5, 10] 23 ''' 24 ''' 25 li1 = list([1,2,3,4]) 26 ret = li1.pop(0) ##pop pop() 具体显示去掉哪个元素;去掉的元素的值可以获取 27 print(li1) ## [2, 3, 4] 28 print(ret) # 1 29 ''' 30 ''' 31 li1 = list([1,2,'a','b']) 32 li1.remove('b') ##去掉某个值,函数中写的具体的元素的值 33 print(li1) ###[1, 2, 'a'] 34 ''' 35 ''' 36 li1 = list([1,2,3,4]) 37 li1.reverse() ## 翻转 38 print(li1) ###[4, 3, 2, 1] 39 ''' 40 ''' 41 li1 = list([1,2,3,4,8,5]) 42 li1.sort() ##排序 43 print(li1) ###[1, 2, 3, 4, 5, 8] 44 '''
###元组
##元组有的功能,列表一定有,列表有的功能,元组不一定有
1 ''' 2 tu1 = (11,22,33,44,) 3 tu2 = tuple((11,22,33,44,)) ###接受的参数是一个序列 4 tu3 = tuple([11,22,33,44,]) 5 li1 = [11,22,33] 6 tu4 = tuple(li1) ###实现列表和元组的转换 7 8 print(tu1) 9 #print(tu2) 10 11 ###count 12 ##index
###字典
###字典是无序的序列
1 ''' 2 dic1 = {'k1':'v1','k2':'v2'} 3 dic2 = dict(k1='v1',k2='v2') 4 5 print(dic1) ##{'k2': 'v2', 'k1': 'v1'} 6 print(dic2) ##{'k2': 'v2', 'k1': 'v1'} 7 ''' 8 ##clear 清空所有的元素 9 ''' 10 dic2 = dict(k1='v1',k2='v2') 11 dic3 = dic2.fromkeys(['k1','k2','k3'],'v1') ###获取key 值,重新得到一个字典 12 print(dic3) 13 ''' 14 ''' 15 dic = dict(k1='v1',k2='v2') 16 #print(dic['k1']) 17 #print(dic['k2']) 18 #print(dic['k3']) ###报错 KeyError: 'k3' 19 20 print(dic.get('k1')) 21 print(dic.get('k2')) 22 print(dic.get('k3','alex')) ##alex, 当值不存在时,设置值为alex 23 ''' 24 ''' 25 dic = dict(k1='v1',k2='v2') 26 print(dic.keys()) ##获取所有的keys dict_keys(['k1', 'k2']) 27 print(dic.values()) ##或者所有的values dict_values(['v1', 'v2']) 28 print(dic.items()) ##或者所有的keys和values对 dict_items([('k1', 'v1'), ('k2', 'v2')]) 29 for k in dic.keys(): ###循环获取所有的keys k1 30 print(k) #k2 31 for v in dic.values(): ###循环获取所有的values v1 32 print(v) #v2 33 for k,v in dic.items(): ##循环获取所有的keys和values对 k1 v1 34 print(k,v) ### k2 v2 35 ''' 36 37 ###pop 去掉一个 38 ''' 39 dic = dict(k1='v1',k2='v2') 40 print(dic.pop('k1')) ##具体取走了什么 v1 41 print(dic) ###取走之后的字典结果 {'k2': 'v2'} 42 ''' 43 ''' 44 dic = dict(k1='v1',k2='v2') 45 print(dic.popitem()) ###r任意删除一对 46 print(dic) 47 ''' 48 ''' 49 dic = dict(k1='v1',k2='v2') 50 print(dic.update({'k3':'123'})) 51 print(dic) ### {'k2': 'v2', 'k3': '123', 'k1': 'v1'} 52 ''' 53 '''
###练习题
有一个数字的集合11,22,33,44,55,66,77,88,99。
将所有大于66的值保存到字典的第一个key中,将小于66的值保存至第二个key中
即 {'k1':大于66,'k2’:小于66}
实现方法一:
将要实现的元素,拆分为最简单,一个一个实现。
定义一个字典、定义两个列表值作为字典的values,再通过逻辑得到values的具体值
补充的:各种集合的打印方法
1 ''' 2 s1 = 'alexabc' 3 for i in s1: 4 print(i) 5 ''' 6 ''' 7 all_list = [11,22,33,44,55,66,77,88,99] 8 for i in all_list: 9 print(i) 10 ''' 11 ''' 12 tu1 = (11,22,33) 13 for i in tu1: 14 print(i) 15 ''' 16 dic1 = {'k1':'v1','k2':'v2'} 17 for k in dic1.keys(): 18 print(k) 19 for v in dic1.values(): 20 print(v) 21 for k,v in dic1.items(): 22 print(k,v)
1 all_list = [11,22,33,44,55,66,77,88,99] 2 dic = {} 3 li1 = [] 4 li2 = [] 5 for i in all_list: 6 if i>66: 7 li1.append(i) 8 else: 9 li2.append(i) 10 dic['k1'] = li1 11 dic['k2'] = li2 12 print(dic)
实现方法二:
原理:定义一个字典,通过逻辑判断生成value 值。 用到了列表的追加
1 all_list = [11,22,33,44,55,66,77,88,99] 2 dic = {} 3 for i in all_list: 4 if i>66: 5 if 'k1' in dic.keys(): 6 dic['k1'].append(i) 7 else: 8 dic['k1'] = [i,] 9 else: 10 if 'k2' in dic.keys(): 11 dic['k2'].append(i) 12 else: 13 dic['k2'] = [i,] 14 print(dic) ######{'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99]}
####集合
set 是一个无序,并且不重复的元素集合
类似于hash值
1 #!/usr/bin/env python 2 ''' 3 s1 = set() 4 s1.add('alex') 5 print(s1) ###结果 {'alex'} 6 ''' 7 ###访问速度快 8 ###原生解决了重复问题 9 # ##作用之一:爬虫 10 ##add 添加 11 ##clear 清除元素 12 ###copy 浅拷贝 13 ###discard 14 ##intersection 取交集,新创建一个set 15 ##intersection_update 取交集,修改原来set 16 17 ##isdisjoint 如果没有交集 返回true 18 ###issubset 是否是子集 19 ##issuperset 是否是父集 20 21 ### 22 ###union 并集 23 ##update 更新 24 #symmetric_difference 差集,创建新对象 25 ##symmetric_difference_update 差集,改变原来 26 27 28 ''' 29 s2 = set(['alex','eric','tony','alex']) 30 print(s2) ##{'eric', 'alex', 'tony'} 31 ret = s2.difference(['alex','eric']) ##生成一个新的集合 32 print(s2) ##{'eric', 'alex', 'tony'} ##旧的集合不改变 33 print(ret) # {'tony'} 34 ''' 35 ''' 36 s2 = set(['alex','eric','tony','alex']) 37 print(s2) # {'tony', 'eric', 'alex'} 38 ret = s2.difference_update(['alex','eric']) ##在旧集合的基础上直接修改,得到结果。或者说删除当前set中所有包含在参数集合里的元素 39 print(s2) # {'tony'} 40 print(ret) # None 41 ''' 42 ''' 43 s2 = set(['alex','eric','tony','alex']) 44 ret = s2.pop() 45 print(s2) ## {'alex', 'tony'} 46 print(ret) ## eric 47 ''' 48 ''' 49 s2 = set(['alex','eric','tony','alex']) 50 ret1 = s2.remove('tony') 51 print(s2) ## {'eric', 'alex'} 52 print(ret1) ### None 53 ''' 54 ###pop() remove()执行后,旧set 都会改变。pop去掉的值会赋给新的变量。而remove不会 55 56 57 58 59 ###数据更新 60 ''' 61 old = set(old_dict.keys()) 62 new = set(new_dict.keys()) 63 64 交集 65 update_set = old.intersection(new) 66 67 差集 68 delete_set = old.difference(new) ###这种方法好像在数学上没有这个概念 69 add_set = new.difference(old) 70 上面两种实现方法和下面的实现效果一样。下面的更绕 71 delete_set = old.symmetric_difference(update_set) ###这种方法和数学上的并集有些不同 72 add_set = new.symmetric_difference(update_set) 73 ''' 74 ''' 75 s1 = set([11,22,33]) 76 s2 = set([22,44]) 77 ret1 = s1.difference(s2) 78 ####从字面意思来看是S1集合中的元素和s2中的元素比较有哪些不同的,不同的就留下来。 79 ret2 = s1.symmetric_difference(s2) 80 ###从字面意思来说是对称的不同;从程序的角度来说,是s1中的元素循环和s2中元素比较,不同的留下,s2中的元素循环和s1中的元素比较,不同的留下。 81 print(ret1) ###结果 {33, 11} 82 print(ret2) ###结果 {33, 11, 44} 83 '''
###collections 序列
由于之前的字典、元组、列表等或多或少存在一些缺点
比如:
字典是无序的
列表的元素类型未知
collections 序列就是为了解决上面的问题而生
###collections 之counter
counter(计数器) 是对字典类型的补充,用于追踪值得出现次数
counter 类继承dict的类(功能) ps:具备字典的所有功能 + 自己的功能
dict 有的方法 items() keys() values()
counter 继承了dict的类 同样有上面的方法 额外有一个方法 elements() 取所有的元素
1 #!/usr/bin/env python 2 import collections 3 obj = collections.Counter('fdsfsfsfdfsdfsvrodo') 4 print(obj) ########Counter({'f': 6, 's': 5, 'd': 4, 'o': 2, 'r': 1, 'v': 1}) 5 print(obj.most_common(4)) ####获取排名前4多的情况 [('f', 6), ('s', 5), ('d', 4), ('o', 2)] 6 7 #for item in obj.elements(): ##所有元素 8 # print(item) ###fdsfsfsfdfsdfsvrodo 9 10 for k,v in obj.items(): 11 print(k,v) 12 13 ''' 14 结果 15 d 4 16 s 5 17 o 2 18 r 1 19 f 6 20 v 1 21 '''