Python入门基础:从字典到序列

 

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()

复制列表

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌上花开香正浓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值