数据类型的分类
数字、字符串、列表、元组、字典、集合
1.1、数字int型,主要是用来计算的。
1.1.1、布尔值型bool
真 1 True
假 0 False
2.1、字符串str
2.1.1、字符串的索引与切片
索引即下标,就是字符串组成的元素从第一个开始,初始索引为0。
1
2
3
4
5
|
a = 'ABCD' print (a[ 0 ]) = = = > A print (a[ 1 ]) = = = > B print (a[ 2 ]) = = = > C print (a[ 3 ]) = = = > D |
切片就是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串(原则是顾头不顾腚)。
1
2
3
4
5
6
7
|
a = 'ABCDEF' print (a[ 0 : 2 ]) = = = > AB print (a[ 2 : 4 ]) = = = > CD print (a[ 0 :]) = = = > ABCDEF #默认到最后 print (a[ 0 : - 1 ]) = = = > ABCDEF #-1就是最后一个 print (a[ 0 : 5 : 2 ]) = = = > ACE #步长2 print (a[ 5 : 0 : - 2 ]) = = = > FDB # 反向加步长 |
2.1.2 字符串的常用方法。
3.1 元组 tupe
元组也称为只读列表,数据只可以被查询,不能被修改。字符串的切片操作同样适用于列表。列表用()标示,黎明的元素用逗号隔开。如(1,2,3)
4.1 列表 list
列表是python的基础数据类型之一,是用[]括起来,每个元素以逗号隔开,里面可以存放各种数据类型。如:
li = ['sunshine',18,{'hobby':'eat'},[1,2,3]]
列表还可以储存大量数据,32位python的限制是536870912个元素,64位python的限制是1152921504606846975 个元素。
列表是有序的,有索引值,可以切片,方便取值。
4.1.1 增
4.1.2 删
4.1.3 改
4.1.4 查
通过切片的方式或者循环的方式去查。
4.1.5 其它操作
count (数) 统计某个元素在列表中出现的次数。
1
2
|
a = [ 's' , 'u' , 'n' , 's' , 'h' , 'i' , 'n' , 'e' ] print(a.count( 's' )) # 出现了2次 |
index 方法 用于从列表中找出某个值第一个匹配项的索引位置
1
2
|
a = [ 's' , 'u' , 'n' , 's' , 'h' , 'i' , 'n' , 'e' ] print(a.index( 'n' )) # 第一个出现n的索引位置为 2 |
sort 在原位置对列表进行排序
1
2
3
4
|
a = [ 's' , 'u' , 'n' , 's' , 'h' , 'i' , 'n' , 'e' ] print(a. sort ()) # 输出为 None a. sort () # 没有返回值 print(a) # ['e', 'h', 'i', 'n', 'n', 's', 's', 'u'] |
reverse 将列表中的元素反向存放
1
2
3
4
|
a = [ 's' , 'u' , 'n' , 's' , 'h' , 'i' , 'n' , 'e' ] # print(a.reverse()) # 输出为 None a.reverse() # 没有返回值 print(a) # ['e', 'n', 'i', 'h', 's', 'n', 'u', 's'] |
5.1 字典 dict
字典是Python中唯一的映射类型,采用键值对(key-->value)的形式存储数据。Python 对key进行哈希函数运算,根据运算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示kye必须是不可变类型,如:数组、字符串、元组。
字典是除列表之外最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象结合。两者的区别在于:字典是通过key来取值的,而不是通过偏移存取。
5.1.1 增
5.1.2 删
5.1.3 改
5.1.4 查
5.1.5 其它
5.1.6 字典的循环
6.1 其它 range / enumerate / range
6.1.1 for 循环:用户按照顺序循环可迭代对象的内容。
6.1.2 enumerate 枚举,对于一个可迭代的对象(iterable)/ 可遍历的对象(list,str等),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
6.1.3 range 指定范围,生成指定数字
7.1 集合
集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希的。主要作用是:
1、去重 ---> 把一个列表变成集合,就自动去重了。
2、关系测试 --> 测试两组数据之间的交集、差集、并集等关系。
7.1.1 创建集合
1
2
3
4
|
set1 = set ({ 1 , 2 , 'sunshine' }) set2 = { 1 , 2 , 'sunshine' } print (set1, type (set1)) # {1, 2, 'sunshine'} <class 'set'> print (set2, type (set2)) # {1, 2, 'sunshine'} <class 'set'> |
7.1.2 增
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
set1 = { 'sunshine' , 'age' , 18 } set1.add( 'hobby' ) print (set1) # {18, 'age', 'sunshine', 'hobby'} 集合是无序的 set1.update( 'A' ) print (set1) # {'A', 'sunshine', 18, 'hobby', 'age'} set1.update( 'BC' ) print (set1) # {'C', 'A', 'sunshine', 18, 'B', 'hobby', 'age'} set1.update([ 1 , 2 , 3 ]) print (set1) # {1, 2, 3, 'C', 'A', 'sunshine', 18, 'B', 'hobby', 'age'} # 复制集合 num1 = { 1 , 2 , 3 } num2 = num1.copy() print (num2) # {1, 2, 3} |
7.1.3 删
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
set1 = { 'sunshine' , 'age' , 18 } set1.remove( 'sunshine' ) # 删除一个元素 print (set1) # {'age', 18} set1.pop() # 随机删除一个元素 print (set1) # {'age'} set1.clear() # 清空集合 print (set1) # set() del set1 # 删除集合 print (set1) # 报错 NameError: name 'set1' is not defined # discard() 删除集合中指定的元素,删除不存在的则不操作 num = { 1 , 2 , 3 } num.discard( 4 ) print (num) # {1, 2} num.discard( 3 ) print (num) # {1, 2, 3} |
7.1.4 其它操作
1
2
|
set1 = { 1 , 2 , 3 } set2 = { 2 , 3 , 4 } |
交集 (& 或 intersection)
1
2
3
4
5
6
7
8
|
print (set1 & set2) # {2, 3} print (set1.intersection(set2)) #{2, 3} # intersection_update 交集更新操作 dreamers = { 'ljl' , 'wc' , 'xy' , 'zb' , 'lsy' } girls = { 'mmf' , 'lsy' , 'syj' } dreamers.intersection_update(girls) # 将集合dreamers与集合girls的交集赋值给dreamers print (dreamers) # {'lsy'} |
并集 (| 或 union)
1
2
|
print (set1 | set2) # {1, 2, 3, 4} print (set2.union(set1)) # {1, 2, 3, 4} |
差集 (- 或 difference)
1
2
3
4
5
6
7
8
|
print (set1 - set2) # {1} print (set1.difference(set2)) # {1} # difference_update 差集更新操作。 dreamers = { 'ljl' , 'wc' , 'xy' , 'zb' , 'lsy' } girls = { 'mmf' , 'lsy' , 'syj' } dreamers.difference_update(girls) # dreamers去除跟girls相同的元素 print (dreamers) #{'zb', 'ljl', 'xy', 'wc'} |
反交集 (^ 或 symmetric_difference)
1
2
|
print (set1 ^ set2) # {1, 4} print (set1.symmetric_difference(set2)) # {1, 4} |
子集与超集 (issubset / issuperset)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
set1 = { 1 , 2 , 3 } set2 = { 1 , 2 , 3 , 4 , 5 } print (set1 < set2) # True print (set1.issubset(set2)) # True 说明set1 是 set2 的子集 print (set2 > set1) #True print (set2.issuperset(set1)) #True 说明set2 是 set1 的超集 # isdisjoint() # 检测2个集合是否不存在交集,存在交集则返回False res = set2.isdisjoint(set1) print (res) # False #symmetric_difference() 对称差集 set1 = { 1 , 2 , 3 } set2 = { 2 , 3 , 4 } res = set1.symmetric_difference(set2) print (res) # {1, 4} #symmetric_difference_update() 对称更新差集 set1.symmetric_difference_update(set2) print (set1) # {1, 4} |
forzenset 不可变集合,让集合变成不可变类型
1
2
|
a = frozenset ( 'sunshine' ) print (a, type (a)) # frozenset({'e', 's', 'n', 'i', 'u', 'h'}) <class 'frozenset'> |
集合的一些应用
练习题:
购物车
功能要求:
要求用户输入总资产,例如:2000
显示商品列表,让用户根据序号选择商品,加入购物车购买,如果商品总额大于
总资产,提示账户余额不足,否则,购买成功
goods = [
{"name":"电脑","price":1999},
{"name":"鼠标","price":10},
{"name":"游艇","price":20},
{"name":"美女","price":998}
]