Python中的基本概念:列表和元组
上文说到Python中的容器数据类型有很多,上节简单巩固了列表、元组和字符串,这个小节主要就是字典、集合和序列了。
字典Dict
字典 是无序的 键:值(key:value)对集合,键必须是唯一的(在同一个字典之内),但值则不必,值可以取任何数据类型,但键必须是不可变的,如字符串,数字。
1.、dict 内部存放的顺序和 key 放入的顺序是没有关系的。
2.、dict 查找和插入的速度极快,不会随着 key 的增加而增加,但是需要占用大量的内存。
字典 定义语法为 {元素1, 元素2, ..., 元素n}
1. 其中每一个元素是一个「键值对」-- 键:值 ( key:value )
2. 关键点是「大括号 {}」,「逗号 ,」和「冒号 :」
3. 大括号 -- 把所有元素绑在一起
4. 逗号 -- 将每个键值对分开
5. 冒号 -- 将键和值分开
注意:
1)、序列是以连续的整数为索引,与此不同的是,字典以"关键字"为索引,关键字可以是任意不可变类型,通常用字符串
或数值。
2.)、字典是 Python 唯一的一个 映射类型,字符串、元组、列表属于序列类型。
快速判断一个数据类型 X 是不是可变类型的:用 hash(X) ,只要不报错,证明 X 可被哈希,即不可变,反过来不可被哈希,即可变。
尝试之后会发现:
<1>、数值、字符和元组 都能被哈希,因此它们是不可变类型。
<2>、列表、集合、字典不能被哈希,因此它是可变类型。
字典的创建:
1)、通过字符串或数值作为key 来创建字典。
注意:如果我们取的键在字典中不存在,会直接报错KeyError :
brand = ['李宁', '耐克', '阿迪达斯']
slogan = ['一切皆有可能', 'Just do it', 'Impossible is nothing']
print('耐克的口号是:', slogan[brand.index('耐克')])
2)、通过元组作为key 来创建字典,但一般不这样使用。
3)、通过构造函数dict 来创建字典:dict() -> 创建一个空的字典。
注意:通过key 直接把数据放入字典中,但一个key 只能对应一个value ,多次对一个key 放入 value ,后面的值会把前面的值冲掉。
字典的内置函数及方法:
内置函数有3个——
函数 | 描述 |
len(dict) | 计算字典元素个数,即键的总数 |
str(dict) | 输出字典,以可打印的字符串表示。 |
type(variable) | 返回输入的变量类型,如果变量是字典就返回字典类型 |
内置方法——
函数 | 描述 |
dict.fromkeys(seq[,val]) | 创建新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
dict.keys() | 返回一个迭代器,可以使用 list() 来转换为列表 |
dict.values() | 返回一个迭代器,使用 list() 来转换为列表 |
dict.items() | 以列表返回可遍历的(键, 值) 元组数组 |
dict.get(key,default=None) | 返回指定键的值,如果键不在字典中返回 default 设置的默认值 |
dict.setdefault(key,default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
dict.pop(key[,default] | 删除字典给定 key 所对应的值,返回被删除值。key值必须给出,否则返回default值 |
del dict[key] | 删除字典中给定key所对应的值 |
dict.popitem() | 随机返回并删除字典中的最后一对键和值 |
dict.clear() | 删除字典内所有元素 |
dict.copy() | 返回一个字典的浅复制 |
dict.update(dict2) | 把字典dict2的键/值对更新到dict里 |
key in dict in | 如果键在字典dict里返回true,否则返回false,与not in刚好相反 |
集合Set
Python中set与dic类似,也是一组key的组合,但是不同的set不存储值,而且不存在重复的key,因而集合(set)是一个无序的不重复元素序列。
集合的创建:
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
集合的访问:
1)、可以用len()内建函数得到集合的大小
2)、可以用for循环把集合中的数据一个个读取出来
3)、可以通过in或者not in来判断元素是否在集合中
集合的内置方法列表
方法 | 描述 |
set.add() | 为集合添加元素 |
set.update(set) | 给集合添加元素,类似add方法 |
set.remove(item) | 移除指定元素,不存在则报错 |
set.discard(val) | 移除指定元素,不存在则无提示 |
set.pop() | 随机移除元素 |
set.intersection(set1,set2)或者set1 & set2 | 返回集合的交集 |
set.intersection_update(set1,set2) | 返回集合的交集,在原始集合上移除不重复的元素 |
set.union(set1,set2) 或者 set1 | set2 | 返回两个集合的并集 |
set.difference(set1,set2) 或者set1 – set2 | 返回多个集合的差集 |
set.difference_update(set1,set2) | 返回多个集合的差集,在原始集合上移除 |
set.symmetric_difference(set)或者 set1 ^ set2 | 返回两个集合的异或 |
set.symmetric_difference_update(set) | 返回两个集合的异或,在原始集合上操作 |
set.issubset(set) 或者 set1 <= set2 | 判断指定集合是否为该方法参数集合的子集 |
set.issuperset(set) 或者set1 >= set2 | 判断该方法的参数集合是否为指定集合的子集 |
set.isdisjoint(set) | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False |
集合的转换:
可以将集合转换为列表、元组等——
se = set(range(4))
li = list(se)
tu = tuple(se)
print(se, type(se))
print(li, type(li))
print(tu, type(tu))
注意:python 提供了不能改变元素的集合的实现版本,即不能增加或删除元素,类型名叫frozenset 。需要注意的是frozenset 仍然可以进行集合操作,只是不能用带有update 的方法。
frozenset([iterable]) 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
序列List
看到list单词,其实大家就知道这个就是之前说到的列表,后来看了一下,这个的内置函数和方法还挺多,这里单独列出来,也便于自己日后的复习和参考。
序列的内置函数
函数 | 描述 |
list(sub) | 将元组转换为列表 |
len(s) | 列表元素个数 |
max(sub) | 返回列表元素最大值 |
min(sub) | 返回列表元素最小值 |
sum(iter[,start=0]) | 返回序列iter和可选参数start的总和 |
sorted(iter,key=None,reverse=False) | 以key这个元素进行升降序排序 |
列表的内置方法
方法 | 描述 |
list.append(obj) | 在列表末尾添加新的对象 |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(obj) | 将对象插入列表 |
list.pop([index=-1]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素 |
list.sort(key=None,reverse=False) | 对原列表进行排序 |
list.clear() | 清空列表 |
list.copy() | 复制列表 |