python常用的数据类型包括整型(int)、字符串(str)、布尔值(bool)、列表(list)、元组(tuple)、字典(dict)、集合(set)
整型(int)
int操作方法
bit_length()就是查看十进制数转换成二进制在内存中占用了多少长度
1 a = 5
2 print(a.bit_length()) #当十进制用二进制表示时,最少使用的位数 3
int、bool、str三种转换
>>> i = 10 # int --> str
>>>str(i)'10'
>>> ii = -1
>>>str(ii)'-1'
>>> iii =0>>>str(iii)'0'
>>> iiii = 000
>>>str(iiii)'0'
1 >>> s1 = '20' # str --> int
2 >>>int(s1)3 20
4 >>> s2 = '0500'
5 >>>int(s2)6 500
7 >>> s3 = '-122'
8 >>>int(s3)9 -122
10 >>>
1 >>> i = 5 # int --> bool
2 >>>bool(i)3 True4 >>> a = -1
5 >>>bool(a)6 True7 >>> b =08 >>>bool(b)9 False
>>> int(True) #bool --> int
1
>>>int(False)
0>>>
>>> s4 = 'hello' #str --> bool
>>>bool(s4)
True>>> s5 = ' '
>>>bool(s5)
True>>> s6 = ''
>>>bool(s6)
False
1 >>>str(True) # bool --> str2 'True'
3 >>>str(False)4 'False'
字符串(str)
python中凡是使用引号引起来的数据可以称为字符串类型,组成字符串的每个元素称为字符。
组成字符串的字符元素从左到右依次排列,是有顺序的(从0开始)。对字符串进行索引,切片出来的数据都是字符串类型。
切片操作
1 >>> s = 'python学习课程'
2 >>> s1 =s[0]3 >>>s14 'p'
5 >>>type(s1)6
7 >>> s2 = s[6]8 >>>s29 '学'
10 >>> s3 = s[-1]11 >>>s312 '程'
13 >>> s4 = s[0:6]14 >>>s415 'python'
16 >>> s5 = s[:6]17 >>>s518 'python'
19 >>> s6 = s[6:]20 >>>s621 '学习课程'
22 >>> s7 = s[:8:2] #2 代表步长
23 >>>s724 'pto学'
25 >>> s8 = s[-1:-8]26 >>>s827 ''
28 >>> s8 = s[-1:-8:-1]29 >>>s830 '程课习学noh'
31 >>> s9 =s[:]32 >>>s933 'python学习课程'
34 >>> s10 = s[-1:]35 >>>s1036 '程'
View Code
1 s = "123a4b5c"
2 s1 = s[:3]3 print(s1) #"123"
4 s2 = s[3:6]5 print(s2) #"a4b"
6 s3 = s[::2]7 print(s3) #"1345"
8 s4 = s[1:-2:2]9 print(s4) #"2ab"
10 s5 = s[-1]11 print(s5) #"c"
12 s6 = s[-3::-2]13 print(s6) #"ba2"
View Code
1 >>> s = "Turn right on this street."
2 >>> s1 = s.upper() #变大写
3 >>>s14 'TURN RIGHT ON THIS STREET.'
5 >>> s2 = s.lower() #变小写
6 >>>s27 'turn right on this street.'
8 >>> s.count("r")9 3
10 >>>
11 >>> s.count("r", 0, 9)12 2
13 >>> ss = "ascaljcdashc;LS"
14 >>>ss15 'ascaljcdashc;LS'
16 >>> ss.startswith("as") #以...开头
17 True18 >>> ss.startswith("asd")19 False20 >>> ss.startswith("sw", 5, -1) #加了切片
21 False22 >>> ss.startswith("jc", 5 , -1)23 True24 >>> ss.endswith("S") #判断是否以...结尾
25 True26 >>> ss.endswith("c", 6, 11)27 False28 >>> ss.endswith("c", 6, 12)29 True30 >>> s = "Hope has always been like a teenager, clean and pure peace of mind"
31 >>>s.split()32 ['Hope', 'has', 'always', 'been', 'like', 'a', 'teenager,', 'clean', 'and', 'pure', 'peace', 'of', 'mind']33
34 >>> s.split(",")35 ['Hope has always been like a teenager', 'clean and pure peace of mind']36
37 >>> s1 = "name:alex:age:18:gender:male"
38 >>> s1.split(":")39 ['name', 'alex', 'age', '18', 'gender', 'male']40 >>> s1.split(":",2)41 ['name', 'alex', 'age:18:gender:male']42 >>> s2 = ":tom:ethan:alex"
43 >>> s2.split(":")44 [' ', 'tom', 'ethan', 'alex']45 >>> s3 = "alex"
46 >>> "+".join(s3)47 'a+l+e+x'
48 >>> type("+".join(s3))49
50 >>> s4 = "name"
51 >>> " ".join(s3, s4)52 Traceback (most recent call last):53 File "", line 1, in
54 TypeError: join() takes exactly one argument (2given)55 >>> ss =s.split()56 >>>ss57 ['Hope', 'has', 'always', 'been', 'like', 'a', 'teenager,', 'clean', 'and', 'pure', 'peace', 'of', 'mind']58 >>> " ".join(ss)59 'Hope has always been like a teenager, clean and pure peace of mind'
60
61 >>> li = ["s", "a", "b", "f", 33]62 >>>type(li)63
64 >>> "".join(li)65 Traceback (most recent call last):66 File "", line 1, in
67 TypeError: sequence item 4: expected str instance, int found68 >>> s = "Hope has always been like a teenager, clean and pure peace of mind"
69 >>>s.split()70 ['Hope', 'has', 'always', 'been', 'like', 'a', 'teenager,', 'clean', 'and', 'pure', 'peace', 'of', 'mind']71 >>>
72 >>> s.split(",")73 ['Hope has always been like a teenager', 'clean and pure peace of mind']74
75 >>> s1 = "name:alex:age:18:gender:male"
76 >>> s1.split(":")77 ['name', 'alex', 'age', '18', 'gender', 'male']78 >>> s1.split(":",2)79 ['name', 'alex', 'age:18:gender:male']80 >>> s2 = ":tom:ethan:alex"
81 >>> s2.split(":")82 [' ', 'tom', 'ethan', 'alex']83
84 >>> s3 = "alex"
85 >>> "+".join(s3)86 'a+l+e+x'
87 >>> type("+".join(s3))88
89 >>> s4 = "name"
90 >>> " ".join(s3, s4)91 Traceback (most recent call last):92 File "", line 1, in
93 TypeError: join() takes exactly one argument (2given)94 >>> ss =s.split()95 >>>ss96 ['Hope', 'has', 'always', 'been', 'like', 'a', 'teenager,', 'clean', 'and', 'pure', 'peace', 'of', 'mind']97 >>> " ".join(ss)98 'Hope has always been like a teenager, clean and pure peace of mind'
99
100 >>> li = ["s", "a", "b", "f", 33]101 >>>type(li)102
103 >>> "".join(li)104 Traceback (most recent call last):105 File "", line 1, in
106 TypeError: sequence item 4: expected str instance, int found107 >>> s= "hello"
108 >>> s.strip() #去除空格
109 'hello'
110 >>> s5 = "as你好jhd"
111 >>> s5.strip("ajhsd")112 '你好'
113 >>> s5.strip("ajhs")114 '你好jhd'
115 >>> s6 = "as你r好jhd"
116 >>> s6.strip("ajhsd")117 '你r好'
118 >>>
119 >>> "**barry*****".strip()120 '**barry*****'
121 >>> "**barry****".strip("*")122 'barry'
123 >>> "**barry****".lstrip("*")124 'barry****'
125 >>> "**barry****".rstrip("*")126 '**barry'
127
128 >>> s = "他叫王麻子,今年25,目前就读于双一流高校,王麻子喜欢唱歌,班上的人都叫王麻子歌神"
129 >>> s.replace("王麻子","张三")130 '他叫张三,今年25,目前就读于双一流高校,张三喜欢唱歌,班上的人都叫张三歌神'
131 >>> s.replace("王麻子","张三",2)132 '他叫张三,今年25,目前就读于双一流高校,张三喜欢唱歌,班上的人都叫王麻子歌神'
133 >>> s.replace("王麻子","张三",1,,3)134 File "", line 1
135 s.replace("王麻子","张三",1,,3)136 ^
137 SyntaxError: invalid character inidentifier138 >>> s.find("双一流") #返回的找到的元素的索引,如果找不到返回-1
139 16
140 >>> s.find("25", 1, 10)141 8
142 >>> s.find("哈哈")143 -1
144 >>> ss = "tom123"
145 >>> ss.isalnum() #字符串由字母或者数字组成
146 True147 >>> ss.isalpha() #字符串只由字母组成
148 False149 >>> ss.isdecimal() #字符串只由十进制组成
150 False151 >>> ss.index("tom") #返回的找到的元素的索引,找不到报错
152 0153 >>> ss.index("12")154 3
155 >>> ss.index("12",3, 6)156 3
View Code
1 s = "我叫{},今年{},毕业于{}".format("alex", 25, "ynu") #我叫alex,今年25,毕业于ynu
2 s = "我叫{0},今年{1},毕业于{2}, {2}是一所双一流高校".format("alex", 25, "ynu") #我叫alex,今年25,毕业于ynu, ynu是一所双一流高校
3 s = "我叫{name},今年{age},毕业于{school}, {school}是一所双一流高校".format(name = "alex", age = 25, school = "ynu") #我叫alex,今年25,毕业于ynu, ynu是一所双一流高校
4 #print(s)
View Code
1 s = "if you are not satified with the life"
2 #print(s.capitalize()) #首字母大写 # If you are not satified with the life
3 #print(s.swapcase()) #大小写翻转 # IF YOU ARE NOT SATIFIED WITH THE LIFE
4 s1 = "IF YOU ARE NOT SATIFIED WITH THE LIFE"
5 #print(s1.swapcase()) # if you are not satified with the life
6 print(s.title()) #每个单词的首字母大写 # If You Are Not Satified With The Life
View Code
for循环
有限循环
for 变量 in iterable:
pass
for...else...
for i in range(3):print(i) #i:0,1,2
for j in range(1,10): #1是起始位置
print(j) #j:1,2,3,4,5,6,7,8,9
for k in range(1,10,2): #2是步长
print(k) #k:1,3,5,7,9
for m in range(100):if m < 50 or m > 70:print(m) #输出0..49和71...99的int类型数
index=0while index < 13:print(index) #循环输出0
index=0while index < 13:print(index) #0...12
index += 1s= "第一行找规律,第二行验证规律,第三行使用规律"
#print(len(s)) # 22
index =0while index < 22: #写成 index < 23 报IndexError: string index out of range
#print(index) # 0到21
print(s[index])#print(s[index].join("sb"))
print(s[index] + "sb")
index+= 1s= "Don't let fear stop you from doing the thing you love"li=[]for item ins.split():#print(item) # Don't、let、...、you、love
li.append(item)#print(li) # ["Don't", 'let', 'fear', 'stop', 'you', 'from', 'doing', 'the', 'thing', 'you', 'love']
dic= {"name" : "tom", "age" : 25, "gender" : "female"}for k, v indic.items():#print(k,v) # name tom age 25 gender female
print(k) #name age gender
for item in enumerate(li): #起始位置默认是0,可更改
print(item) #(0, "Don't")、(1, 'let')、(2, 'fear')...、(10, 'love')
for index, name in enumerate(li, 100): #起始位置默认是0,可更改为100
print(index, name) #(100, "Don't")、(101, 'let')、(102, 'fear')...、(110, 'love')
View Code
列表--list
整型数字主要用于计算,bool值主要用于条件判断,字符串可以存储数据,但是只能存储少量的数据,对于大量的数据用字符串进行存储既不方便又不容易,且存储的数据类型只能是字符串类型。列表是一种可以承载多种数据类型的容器类数据类型,是python的基础数据类型之一,其他编程语言也有类似的数据类型.比如JS中的数组, java中的数组等等。列表相比于字符串,不仅可以储存多种不同的数据类型,而且可以储存大量的数据,列表是有序的,有索引值,可切片,方便取值。列表是可变的(mutable)----可改变列表的内容
列表的创建
# method 1
li = [33, 22, "tom", "hello", [11, "hey"], {"name": "alex", "age": 25} ]
print(li, type(li)) # [33, 22, 'tom', 'hello', [11, 'hey'], {'name': 'alex', 'age': 25}]
# method 2
lii = list()
print(lii, type(lii)) # []
liii = list("123")
print(liii, type(liii)) # ['1', '2', '3']
# method 3 列表推导式
lis = [i for i in range(1, 10, 2)]
print(lis, type(lis)) # [1, 3, 5, 7, 9]
列表的增删改查
1 a = ["zcj", "zcc", "zls", "ldw", "ht"]2
3 #查
4 print(a) #['zcj', 'zcc', 'zls', 'ldw', 'ht']
5 print(a[1]) #"zcc"
6 print(a[2:]) #['zls', 'ldw', 'ht'] 从左到右取到最后 切片
7 print(a[1:3]) #['zcc', 'zls'] 从左往右取,左闭右开
8 print(a[1:-1]) #['zcc', 'zls', 'ldw']
9 print(a[1:-1:2]) #2是步长,['zcc', 'ldw']
10 print(a[:3]) #['zcj', 'zcc', 'zls']
11 print(a[1::2]) #['zcc', 'ldw']
12
13 #以上都是从左往右取
14
15 print(a[3::-1]) #从右往左一个一个的取 ['ldw', 'zls', 'zcc', 'zcj']
16 print(a[-1::-2]) #从右往左隔一个取 ['ht', 'zls', 'zcj']
17 b = a[3::-1]18 print(b) #['ldw', 'zls', 'zcc', 'zcj']
19
20 #添加 有两种方法:append, insert
21
22 a.append("hhh") #默认添加到列表最后,即追加 ,给列表的最后面追加一个元素
23 print(a) #['zcj', 'zcc', 'zls', 'ldw', 'ht', 'hhh']
24
25 a.append(["hhh"])26 print(a) #['zcj', 'zcc', 'zls', 'ldw', 'ht', ['hhh']]
27
28 a.append(["hhh","xxx"]) #a.append("hhh","xxx") 会报错
29 print(a) #['zcj', 'zcc', 'zls', 'ldw', 'ht', ['hhh', 'xxx']]
30
31
32 #extend方法修改了被扩展的列表,而原始的连接操作(+)则不然,它会返回一个全新的列表
33 a.extend(["hhh","xxx"]) #a.extend("hhh", "xxx")会报错
34 print(a) #['zcj', 'zcc', 'zls', 'ldw', 'ht', 'hhh', 'xxx']
35
36 a.extend("hhh")37 print(a) #['zcj', 'zcc', 'zls', 'ldw', 'ht', 'h', 'h', 'h']
38
39 a.extend(["hhh"]) #扩展, 迭代着追加,在列表的最后面迭代着追加一组数据
40 print(a) #['zcj', 'zcc', 'zls', 'ldw', 'ht', 'hhh']
41
42 a.insert(1,"hhh") #在序列下标为一的地方插入,在列表的任意位置插入元素 insert(index, 内容)
43 print(a) #['zcj', 'hhh', 'zcc', 'zls', 'ldw', 'ht']
44
45
46 #修改
47
48 a[1] = "jjj"
49 print(a) #['zcj', 'jjj', 'zls', 'ldw', 'ht']
50
51 a[1:3] = ["hhh", "xxx"]52 print(a) #['zcj', 'hhh', 'xxx', 'ldw', 'ht']
53 l = ['太白', 'alex', 'WuSir', '女神']54 l[1:3] = 'abcdefg'
55 print(l) #['太白', 'a', 'b', 'c', 'd', 'e', 'f', 'g', '女神']
56
57 #按照切片(步长)改值(必须一一对应)
58 l = ['太白', 'alex', 'WuSir', '女神']59 l[::2] = '对应'
60 print(l) #['对', 'alex', '应', '女神']
61
62 #删除 有三种:remove,pop,del
63
64 a.remove("zcj") #remove不能删除切片形式的 通过元素删除列表中该元素,如果有重名元素,则默认删除从左到右的第一个元素
65 a.remove(a[0])66 print(a) #['zcc', 'zls', 'ldw', 'ht']
67
68 b = a.remove("zcj")69 print(a) #['zcc', 'zls', 'ldw', 'ht']
70 print(b) #None
71
72 b = a.pop(0) #通过索引删除列表中对应的元素,该方法有返回值,返回值为删除的元素
73 print(a) #['zcc', 'zls', 'ldw', 'ht']
74 print(b) #zcj
75
76 a.pop() #默认删除最后一个
77 print(a) #['zcj', 'zcc', 'zls', 'ldw']
78
79 del a[0] #按照索引删除该元素 ['zcc', 'zls', 'ldw', 'ht']
80 print(a)81
82 del a #删除整个列表
83 print(a)84
85 a.clear() #清空
86 print(a) #[]
View Code
补充
1 #count
2 a = ["to", "be", "not", "to", "be"]3 print(a.count("to")) #输出2, count统计某个元素在列表中出现的次数
4
5 a = [1, 2 ,3]6 b = [4, 5, 6]7 #a.extend(b)
8 #print(a) # [1, 2, 3, 4, 5, 6]
9 #print(b) # [4, 5, 6]
10 #print(a + b) # [1, 2, 3, 4, 5, 6]
11 print(a * 3) #[1, 2, 3, 1, 2, 3, 1, 2, 3]
12
13 #index 根据内容找其对应的位置
14 a = ["zcj", "zcc", "zls", "ldw", "ht"]15 print(a.index("zcc")) #输出1 假如列表中存在相同的几个值,那么index取的是第一个
16
17 a = ["zcj", "zcc", "ht", "zls", "ldw", "ht"]18 #print(a.index("ht")) # 输出2
19
20 first_ht_index = a.index("ht") #获取列表中第一个ht
21 print("first_ht_index:", first_ht_index) #输出2
22
23 little_list = a[first_ht_index + 1:] #切片,切出从列表第一个ht后的一个元素到最后一个元素的子列表
24
25 sencond_ht_index = little_list.index("ht")26 print("sencond_ht_index", sencond_ht_index) #输出2
27
28 second_ht_in_a_list = first_ht_index + sencond_ht_index + 1
29 print("second_ht_in_a_list", second_ht_in_a_list) #输出5
30 print(a[second_ht_in_a_list]) #输出ht
31
32 #reverse 倒置
33 a = ["zcj", "zcc", "ht", "zls", "ldw", "ht"]34 a.reverse()35 print(a) #输出 ['ht', 'ldw', 'zls', 'ht', 'zcc', 'zcj']
36
37 #sort 排序
38 a = [2, 8, 3, 5, 7]39 a.sort(reverse = True) #从大到小排序 [8, 7, 5, 3, 2]
40 a.sort(reverse = False) #从小到大排序 [2, 3, 5, 7, 8], a.sort()默认从小到大
41 sorted(a)42 print(a) #[2, 8, 3, 5, 7]
43
44 b = ["zcj", "zcc", "ht", "zls", "ldw", "ht"]45 print("ccc" in b) #"ccc"不在b中,故返回False
46 b.sort() #根据ASCII来排序
47 print(b) #['ht', 'ht', 'ldw', 'zcc', 'zcj', 'zls']
48
49 a = [2, 8, 3, 5, 7]50 print(a is list) #输出False
51 print(type(a) is list) #输出True
View Code
列表嵌套
1 ""
2 l1 = [1, 2, 'tom', [1, 'alex', 3,]]3 1, 将l1中的'tom'变成大写并放回原处。4 2,给小列表[1,'alex',3,]追加一个元素,'老男孩教育'。5 3,将列表中的'alex'通过字符串拼接的方式在列表中变成'alexsb'
6 """
7
8 l1 = [1, 2, 'tom', [1, 'alex', 3,]]9
10 #l1[2] = "TOM"11 1[2] = l1[2].upper()12 print(l1) # [1, 2, 'TOM', [1, 'alex', 3]]13
14 l1[3] = [1, 'alex', 3, "老男孩教育"]15 print(l1) # [1, 2, 'tom', [1, 'alex', 3, '老男孩教育']]16
17 l1[3] = l1[3] + ["老男孩教育"]18 print(l1[3]) # [1, 'alex', 3, '老男孩教育']19 print(l1) # [1, 2, 'tom', [1, 'alex', 3, '老男孩教育']]20
21 l1[-1].append("老男孩教育")22 print(l1[-1]) # [1, 'alex', 3, '老男孩教育']23 print(l1) # [1, 2, 'tom', [1, 'alex', 3, '老男孩教育']]24
25 print(l1[-1][1]) # alex26 print(l1[-1][1] + "sb") # alexsb27 #l1[-1][1] = "alexsb"28 l1[-1][1] = l1[-1][1] + "sb"29 print(l1) # [1, 2, 'tom', [1, 'alexsb', 3]]
View Code
元组--tuple
元组:俗称不可变的列表,又被成为只读列表,元祖也是python的基本数据类型之一,用小括号括起来,里面可以存放任何数据类型的数据,查询可以,循环也可以,切片也可以.但就是不能改.
1 #tup1 = () # 空元组
2 #tup2 = (2,) #包含一个元素的元组
3
4 a = (11, 22, 33, 44, 55)5 print(a[1]) #22
6 print(a[1:3]) #(22, 33)
7
8 b = (11, "reality", True, [11, "stop", False, 5])9 for item in b: #查看
10 print(item)11
12 print(b[-1]) #[11, 'stop', False, 5]
13 b[-1].append(2)14 print(b) #(11, 'reality', True, [11, 'stop', False, 5, 2])
15 print(b.index(True)) #2 通过元素找索引(可切片),找到第一个元素就返回,找不到该元素即报错。
16
17 print(b.count(11)) #1 获取某元素在列表中出现的次数
View Code
1 a, b = (1, 10) #元组的拆包,必须一一对应,列表也可以拆包,但主要以元组拆包为主
2 print(a) #1
3 print(b) #10
练习
1 li = range(5)2 print(li[1: 3]) #range(1, 3)
3 print(li[-1]) #4
4
5 for i in range(1, 5, -1):6 print(i) #没输出
View Code
1 实现一个整数加法计算器(多个数相加)2 如:content = input("输入内容:"), 用户输入5 +9+6 +12+ 13
3
4 content = input("请输入内容:")5 li = content.split("+")6 #print(li)
7 sum =08 for i inli:9 #print(int(i))
10 sum +=int(i)11
12 print(sum) #45
View Code
计算用户输入的内容中有几个整数(以个位数为单位)
如 content= input("输入内容:"),如acwav1234dvcqww4dcvr6-*9content= input("请输入内容:")
count=0for i incontent:#print(i, type(i)) # 类型全是str
ifi.isdecimal():
count+= 1
print(count) #7
View Code
1 #判断一句话是否是回文。 回文:正着念和反着念都一样,比如:上海自来水来自海上
2
3 #st = "今天天气不错!"
4 #print(st[:]) # 今天天气不错!
5 #print(st[-1::-1]) # !错不气天天今
6 content = input("请输入内容:")7 if content == content[-1::-1]:8 print("它是回文")9 else:10 print("它不是")
View Code
1 #li = [1, "d", 4, 5, "c"]
2 #print(li[-1]) # c
3 #print(li[-1:]) # ['c']
4
5 li = ["alex", "tom", "ethan"]6 #print("_".join(li)) # alex_tom_ethan
7 s = ""
8 for i inli:9 s = s + "_" +i10 print(s) #_alex_tom_ethan
11 print(s[1:]) #alex_tom_ethan
View Code
字典--dict
鉴于列表可以存储大量的数据类型,但是如果数据量大的话,他的查询速度比较慢;列表只能按照顺序存储,数据与数据之间关联性不强。引入另一种容器型的数据类型,解决前文所述的问题-----字典dict.
数据类型的分类:
可变(不可哈希)的数据类型:list、dict、set
不可变(可哈希)的数据类型:int、bool、str、tuple # 这里的不可变指的是对原对象没有改变,改变形成的是新对象
1 s = "alex" #不可变
2 s2 =s.upper()3 print(s, s2) #alex ALEX
4
5 l1 = [1, 2] #可变
6 l1.append(3)7 print(l1) #[1, 2, 3]
View Code
字典:{}表示,以键值对形式存储的容器型数据类型
1 dic ={2 "王麻子": {"name": "王麻子", "age": 15, "gender": "male"},3 "python学习班": ["李四", "张三", "张帆", "王府井"]4 }
View Code
Key: 不可变(可哈希)的数据类型.并且键是唯一的,不重复的。
Value:任意数据(int,str,bool,tuple,list,dict,set),包括后面要学的实例对象等。
在Python3.5版本(包括此版本)之前,字典是无序的。
在Python3.6版本之后,字典会按照初建字典时的顺序排列(即第一次插入数据的顺序排序)。
字典的查询速度快,存储关联性的数据。出现以空间换时间的缺点
字典的创建
#method1
dic1 =dict()print(dic1) #{}
dic2= dict( (("one", 1), ("two", 2), ("three", 3)) )print(dic2) #{'one': 1, 'two': 2, 'three': 3}
dic3= dict([("age", 18), (("name", "alex"))])print(dic3) #{'age': 18, 'name': 'alex'}
#method2
dic4 = dict(name = "alex", age = 19, one = 1)print(dic4) #{'name': 'alex', 'age': 19, 'one': 1}
#meyhod3
dic5 = dict({"name": "tom", "age": 15, "two":2})print(dic5) #{'name': 'tom', 'age': 15, 'two': 2}
#method 4
dic6 = dict(zip(("name", 123, True, (1, 11)), ("ALEX", 456, "HH", "hello")))print(dic6) #{'name': 'ALEX', 123: 456, True: 'HH', (1, 11): 'hello'}
dic7= dict(zip(["name", 123, True, (1, 11)], ["ALEX", 456, "HH", "hello"]))print(dic7) #{'name': 'ALEX', 123: 456, True: 'HH', (1, 11): 'hello'}
#method 5
dic8 = {k: v for k, v in [("one", 1), ("name", "alex"), ("age", 18)]}print(dic8) #{'one': 1, 'name': 'alex', 'age': 18}
dic9= {k: v for k, v in (("one", 1), ("name", "alex"), ("age", 18))}print(dic9) #{'one': 1, 'name': 'alex', 'age': 18}
#method 6
dic11 = dict.fromkeys("alex", 1234)print(dic11) #{'a': 1234, 'l': 1234, 'e': 1234, 'x': 1234}
View Code
1 dic = {123: 456, True: 999, "id": 1, "name": 'sylar', "age": 18, "stu": ['帅哥', '美⼥'], (1, 2, 3): '麻花藤'}2 print(dic[123]) #456
3 print(dic[True]) #999
4 print(dic['id']) #1
5 print(dic['stu']) #['帅哥', '美⼥']
6 print(dic[(1, 2, 3)]) #麻花藤
7
8 #不合法
9 #dic = {[1, 2, 3]: '周杰伦'} # list是可变的. 不能作为key
10 #dic = {{1: 2}: "哈哈哈"} # dict是可变的. 不能作为key
11 dic = {{1, 2, 3}: '呵呵呵'} #set是可变的, 不能作为key TypeError: unhashable type: 'set'
View Code
字典的常用操作
#增删改查
dic = dict({"name": "alex", "age": 25, "gender": "male"})#print(dic, type(dic)) # {'name': 'alex', 'age': 25, 'gender': 'male'}
#增#dic["hobby"] = "football"#print(dic) # {'name': 'alex', 'age': 25, 'gender': 'male', 'hobby': 'football'}#dic["age"] = 19#print(dic) # {'name': 'alex', 'age': 19, 'gender': 'male'}#dic.setdefault(123, 456) # {'name': 'alex', 'age': 25, 'gender': 'male', 123: 456}
dic.setdefault("school", "ynu") #{'name': 'alex', 'age': 25, 'gender': 'male', 'school': 'ynu'}
dic.setdefault("age", 21) #{'name': 'alex', 'age': 25, 'gender': 'male', 'school': 'ynu'} 并未发生改变
ret = dic.setdefault("weight", 60)#print(dic)#print(ret) # 60 有返回值
#删#res = dic.pop("gender")#print(dic) # {'name': 'alex', 'age': 25}#print(res) # male#res = dic.pop("height")#print(dic) # 报错 KeyError: 'height'#res = dic.pop("height", "没有该项")#print(dic) # {'name': 'alex', 'age': 25, 'gender': 'male'}#print(res) # 没有该项#dic.popitem() # 默认删除最后一项#print(dic) # {'name': 'alex', 'age': 25}#dic.clear() # 清空#print(dic) # {}#del dic["gender"] # {'name': 'alex', 'age': 25}#del dic # 删除整个字典 NameError: name 'dic' is not defined
#改#dic["name"] = "tom" # {'name': 'tom', 'age': 25, 'gender': 'male'}#dic.update(gender = "female", weight = 65) # {'name': 'alex', 'age': 25, 'gender': 'female', 'weight': 65}#dic.update([("one", 1), ("two", 2)]) # {'name': 'alex', 'age': 25, 'gender': 'male', 'one': 1, 'two': 2}#dic.update((("one", 1), ("two", 2))) # {'name': 'alex', 'age': 25, 'gender': 'male', 'one': 1, 'two': 2}
dic1 = dict(zip((123, 456), (111, 789))) #{123: 111, 456: 789}
dic.update(dic1)print(dic1) #{123: 111, 456: 789}
print(dic) #{'name': 'alex', 'age': 25, 'gender': 'male', 123: 111, 456: 789}
#查#print(dic["name"]) # alex#print(dic.get("age")) # 25#print(dic.get("weight")) # None#print(dic.get("hobby", "girl")) # girl
#d1 = dic.keys()#print(d1, type(d1)) # dict_keys(['name', 'age', 'gender']) #print(list(d1), type(list(d1))) # ['name', 'age', 'gender'] #for item in dic.keys():#print(item) # name age gender#for item in dic:#print(item) # name age gender
#d2 = dic.values()#print(d2) # dict_values(['alex', 25, 'male'])#print(list(d2)) # ['alex', 25, 'male']#for i in dic.values():#print(i) # alex 25 male
#d3 = dic.items()#print(d3, type(d3)) # dict_items([('name', 'alex'), ('age', 25), ('gender', 'male')]) #print(list(d3)) # [('name', 'alex'), ('age', 25), ('gender', 'male')]#for i in dic.items():#print(i) # ('name', 'alex') ('age', 25) ('gender', 'male')#for k ,v in dic.items():#print(k, v) # name alex age 25 gender male
View Code
1 dd = dict.fromkeys("你好", "师姐")2 ddd = dict.fromkeys([1, "done", True], "嗯哼")3 print(dd) #{'你': '师姐', '好': '师姐'}
4 print(ddd) #{1: '嗯哼', 'done': '嗯哼'}
View Code
练习题
"""dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
请在k3对应的值中追加一个元素 44,输出修改后的字典
请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典"""dic1= {"k1": "v1", "k2": "v2", "k3": [11, 22, 33]}#dic1["k4"] = "v4"#dic1.setdefault("k4", "v4")#print(dic1) # {'k1': 'v1', 'k2': 'v2', 'k3': [11, 22, 33], 'k4': 'v4'}
#dic1["k1"] = "alex"#dic1.update(k1 = "alex")#print(dic1) # {'k1': 'alex', 'k2': 'v2', 'k3': [11, 22, 33]}
#print(dic1["k3"]) # [11, 22, 33]#dic1["k3"].append(44)#print(dic1) # {'k1': 'v1', 'k2': 'v2', 'k3': [11, 22, 33, 44]}
dic1["k3"].insert(0, 18)print(dic1) #{'k1': 'v1', 'k2': 'v2', 'k3': [18, 11, 22, 33]}
View Code
字典嵌套
dic ={'name': '汪峰','age': 48,'wife': [{'name':'国际章','age':38}],'children': {'girl_first': '小苹果', 'girl_second': '小怡', 'girl_three': '顶顶'}
}#1. 获取汪峰的名字。#2.获取这个字典:{'name':'国际章','age':38}。#3. 获取汪峰妻子的名字。#4. 获取汪峰的第三个孩子名字。
#第一题#ans1 = dic["name"]#ans1 = dic.get("name")#print(ans1)
#第二题#ans2 = dic.get("wife")#print(ans2, type(ans2)) # [{'name': '国际章', 'age': 38}] #print(ans2[0])
#print(dic["wife"][0]) # {'name': '国际章', 'age': 38}
#第三题#print(dic.get("wife")[0].get("name"))#print(dic["wife"][0]["name"])
#第四题#print(dic["children"]["girl_three"])
print(dic.get("children").get("girl_three"))
View Code
dic2 ={'name':['alex',2,3,5],'job':'teacher','oldboy':{'alex':['python1','python2',100]}
}1,将name对应的列表追加⼀个元素’wusir’。2,将name对应的列表中的alex⾸字⺟⼤写。3,oldboy对应的字典加⼀个键值对’⽼男孩’,’linux’。4,将oldboy对应的字典中的alex对应的列表中的python2删除#第一题#dic2["name"].append("wusir")#print(dic2)
#dic2.get("name").append("wusir")#print(dic2)
#第二题#print(dic2["name"][0].capitalize()) # Alex#dic2["name"][0] = dic2["name"][0].capitalize()#print(dic2)
#第三题#dic2.get("oldboy").update(老男孩 = "linux")#dic2["oldboy"]["⽼男孩"] = "linux"#print(dic2)
#第四题#dic2["oldboy"]["alex"].pop(1)#dic2.get("oldboy").get("alex").remove("python2")
dic2.get("oldboy").get("alex").remove("python2")print(dic2)
View Code
作业练习
1 #查找列表li中的元素,移除每个元素的空格,并找出以"A"或者"a"开头,并以"c"结尾的所有元素,并添加到一个新列表中,最后循环打印这个新列表
2 li = ["Taibai", "alexc", "AbC", "egon", "riTiAn", "WuSir", "aqc"]3
4 l1 =[]5 for item inli:6 #print(item.strip())
7 item = item.strip() #去除空格
8 #if (item.startswith("a") or item.startswith("A")) and item.endswith("c"): # 判断方法1 注意这里有优先级,( ) > not > and > or
9 if item[0].upper() == "A" and item[-1] == "c": #判断方法2
10 #print(item)
11 l1.append(item)12
13 #print(l1)
14 for i inl1:15 print(i)
View Code
#开发敏感词过滤程序,提示用户输入评论内容。如果用户输入的内容中包含特殊的字符,#敏感词汇表 li = ["苍老师", "京东热", "武藤兰", "波多野结衣"]#则将用户输入的内容的敏感词替换成等长度的*(苍老师替换成***),#并添加到一个列表中;如果用户输入的内容没有敏感词汇则直接添加到上述的列表中
li= ["苍老师", "京东热", "武藤兰", "波多野结衣"]
L1=[]
comment= input("请输入评论内容:") #acsavwv京东热cfebe你好苍老师嗯哼dsa波多野结衣酷哈哈dawdvv武藤兰
for word inli:#print(word)
if word incomment:#com = comment.replace(word, "*" * len(word))
#print(com) # 第一次循环:acsavwv京东热cfebe你好***嗯哼dsa波多野结衣酷哈哈dawdvv武藤兰
## 第二次:acsavwv***cfebe你好苍老师嗯哼dsa波多野结衣酷哈哈dawdvv武藤兰
## 第三次: acsavwv京东热cfebe你好苍老师嗯哼dsa波多野结衣酷哈哈dawdvv***
## 第四次: acsavwv京东热cfebe你好苍老师嗯哼dsa*****酷哈哈dawdvv武藤兰
comment = comment.replace(word, "*" *len(word))#print(comment)
L1.append(comment)print(L1)
View Code
#有如下列表
Li = [1, 3, 4, "alex", [3, 7, 8, "TaiBai"], 5, "RiTian"]#循环打印列表中的每个元素,遇到列表则再循环打印出它里面的元素
for item inLi:#print(item)
if type(item) islist:for i initem:print(i)else:print(item)
View Code
users = ["李少奇", "李启航", 666, "渣渣辉"]#请用"_"将它们连接起来
#users[2] = "666"#print("_".join(users)) # 李少奇_李启航_666_渣渣辉
#s = "" # 相当于 count = 0#for item in users:#s = s + "_" + str(item)#s = s[1:]#print(s)
s= ""
for index inrange(len(users)):if index ==0:
s= s +str(users[index])else:
s= s + "_" +str(users[index])print(s)
View Code
#请将元组 v1 = (11, 22, 33)中的所有元素追加到列表 v2 = [44, 55, 66]中
v1 = (11, 22, 33)
v2= [44, 55, 66]#a, b, c = v1#print(a) # 11#v2.append(a)#v2.append(b)#v2.append(c)#print(v2)
#for i in v1:#v2.append(i)#print(v2)
v2.extend(v1)print(v2)
View Code
#请将元组 v1 = (11, 22, 33, 44, 55, 66, 77, 88, 99)中的所有偶数索引位置的元素追加到列表 v2 = [44, 55, 66]
v1 = (11, 22, 33, 44, 55, 66, 77, 88, 99)
v2= [44, 55, 66]print(v1[::2]) #(11, 33, 55, 77, 99)
v2.extend(v1[::2])print(v2) #[44, 55, 66, 11, 33, 55, 77, 99]
View Code
#将字典的键和值分别追加到key_list和value_list两个列表
info = {"k1": "v1", "k2": "v2", "k3": [11, 22, 33]}#print(info.keys()) # dict_keys(['k1', 'k2', 'k3'])
key_list =[]
value_list=[]
keys=list(info.keys())
key_list.extend(keys)print(key_list)
values=list(info.values())
value_list.extend(values)print(value_list)
View Code
#有字符串 "k: 1|k1: 2|k2: 3|k3: 4"处理成字典{"k": 1, "k1": 2...}
s = "k: 1|k1: 2|k2: 3|k3: 4"s= s.split("|")#print(s) # ['k: 1', 'k1: 2', 'k2: 3', 'k3: 4']
dic =dict()for item ins:
key, value= item.split(":")#print(key, value, type(key), type(value)) # k 1 ... k3 4
dic[key.strip()] =int(value)print(dic)
View Code
集合--set
集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:
去重,把一个列表变成集合,就自动去重了。
关系测试,测试两组数据之前的交集、差集、并集等关系。
集合的创建
#集合的创建
se = set({1, 2 , "tom"})print(se, type(se)) #{'tom', 1, 2}
se1= {1, 5, "嗯哼"}print(se1, type(se1)) #{1, '嗯哼', 5}
se2= {1, [1, 2], (1, "你哈"), "sss"} #报错, TypeError: unhashable type: 'list'
print(se2, type(se2))
se2= {1, (1, "你哈"), "sss"} #{1, (1, '你哈'), 'sss'}
print(se2, type(se2))#空集合、空字典
print({}, type({})) #{}
print(set(), type(set())) #set()
View Code
集合增删
set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry', "八戒"}#增加#set1.add("黄忠")#print(set1) # {'黄忠', 'ritian', 'barry', 'egon', 'wusir', '八戒', 'alex'}
#update 迭代着增加#set1.update("safas") # {'ritian', 'a', '八戒', 'wusir', 's', 'f', 'barry', 'alex', 'egon'}#set1.update("你") # {'ritian', '八戒', 'barry', 'wusir', 'egon', '你', 'alex'}#set1.update("你好") # {'barry', 'wusir', '八戒', '好', '你', 'alex', 'ritian', 'egon'}#set1.update([1, 2, 3]) # {1, '八戒', 2, 3, 'alex', 'wusir', 'ritian', 'barry', 'egon'}#print(set1)
#删除#set1.remove("alex") # {'ritian', 'egon', 'wusir', 'barry', '八戒'}#set1.pop() # 随机删除一个元素#set1.pop(1) # TypeError: pop() takes no arguments (1 given)#set1.clear() # 清空集合#del set1 # 删除整个集合#print(set1)
#变相改值#set1.remove("八戒")#set1.add("悟空")#print(set1) # {'wusir', 'barry', '悟空', 'egon', 'ritian', 'alex'}
View Code
集合的其他操作
#集合的其他操作
set2 = {1, 2, 3, 4, 5}
set3= {4, 5, 6, 7, 8}#交集 & 或者 intersection#print(set2 & set3) # {4, 5}#print(set2.intersection(set3)) # {4, 5}
#并集 | 或者 union#print(set2 | set3) # {1, 2, 3, 4, 5, 6, 7, 8}#print(set2.union(set3)) # {1, 2, 3, 4, 5, 6, 7, 8}
#差集 - 或者 difference#print(set2 - set3) # {1, 2, 3}#print(set2.difference(set3)) # {1, 2, 3}
#反交集 ^ 或者 symmetric_difference#print(set2 ^ set3) # {1, 2, 3, 6, 7, 8}#print(set2.symmetric_difference(set3)) # {1, 2, 3, 6, 7, 8}
View Code
集合的子集和超集
set4 = {1, 2, 3}
set5= {1, 2, 3, 4, 5, 6}
set6= {1, 2, 3, 10}#子集#print(set4 < set5) # True#print(set4.issubset(set5)) # True#print(set6 < set5) # False
#超集#print(set5 > set4) # True#print(set5.issuperset(set4)) # True
#列表的去重#l1 = [1, 1, 1, 2, 2, 4, 5, 5, 6, 7, 7, 10, 10]#se = set(l1) # {1, 2, 4, 5, 6, 7, 10}#li = list(se) # [1, 2, 4, 5, 6, 7, 10]#print(li)
View Code
frozenset不可变集合,让集合变成不可变类型
#frozenset不可变集合,让集合变成不可变类型
a = frozenset("你好")print(a, type(a)) #frozenset({'你', '好'})
b = frozenset('barry') #frozenset({'r', 'b', 'a', 'y'})
print(b, type(b))
View Code