基础知识拾遗--字符串&元组&列表&字典&collectons序列&集合

############字符串

创建字符串

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 ###小写转为大写
View Code

###列表

 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)
View Code

实现方法二:

原理:定义一个字典,通过逻辑判断生成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]}
python-练习

####集合

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 '''
set代码实现

###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 '''
counter的实现代码
原文地址:https://www.cnblogs.com/qing-add/p/5172392.html