Python从零开始学 Day03 ~列表,元组,字典,集合
本文是上一篇文章的后续,详情点击该链接
列表
用于存储任意数目、任意类型的数据集合。
列表是内置可变序列,是包含多个元素的有序连续的内存空间。
话不多说,撸代码~
创建序列
#创建序列
arr = [1,'小明',9.6,'A',[2,3,6,7,5]]
print(arr)
range()创建整数列表
range()可以帮助我们非常方便的创建整数列表。语法格式为:
range([start,] end [,step])
a = list(range(10))
b = list(range(3,10))
c = list(range(1,20,2))
print("a = " , a)
print("b = " , b)
print("c = " , c)
由此可见,其语法格式是包头不包尾
推导式生成列表
# x 从 0 开始 循环5次 创建 5 个 * 2 的元素
a = [x * 2 for x in range(0,5)]
print(a)
还可以通过if过滤
a = [x * 2 for x in range(100) if x % 6 == 0]
print(a)
乘法扩展
a = [1,2,3]
b = a * 2
print(b)
Del删除
a = [1,2,3,4,5,6,7,8,9]
del a[3]
print(a)
列表的方法
方法 | 描述 |
list.append(x) | 将元素 x 增加到列表 list 尾部 |
list.extend(Lt) | 将列表 Lt 所有元素加到列表 list 尾部 |
list.insert(index,x) | 在列表 list 指定位置 index 处插入元素 x |
list.remove(x) | 在列表 list 中删除首次出现的指定元素 x |
list.pop([index]) | 删除并返回列表list 指定位置 index 处的元素,默认是最后一个元素 |
list.clear() | 删除列表所有元素,但并不是删除这个列表 |
list.index(x) | 返回第一个 x 的索引位置,若不存在 x 元素抛出异常 |
list.count(x) | 返回指定元素 x 在列表 list 中出现的次数 |
len(list) | 返回列表中包含元素的个数 |
list.reverse() | 所有元素原地翻转 |
list.sort() | 所有元素原地排序 |
list.copy() | 返回列表对象的浅拷贝 |
还有那个 slice 切片操作,和字符串差不多,这里就不描述了,后面用到时候再说...
列表排序
修改原列表,不建新列表的排序
import random
a = [1,3,6,7,8,2,5,9]
#升序
a.sort()
print(a)
#降序
a.sort(reverse=True)
print(a)
#打乱
random.shuffle(a)
print(a)
建新列表的排序
通过内置函数 sorted()进行排序,返回新列表,不对原列表做修改。
#升序
a = [1,3,6,7,8,2,5,9]
b = sorted(a)
print(b)
#降序
b = reversed(a) #reversed返回的是迭代器对象
print(list(b))
至于max,min,sum这三个方法都有相应的返回值,顾名思义,就不细写了。
二维列表和Java的二维数组差不多。
元组tuple
列表属于可变序列,元组属于不可变序列。所以元组没有增,删,改相关的方法。但是元组可以转化成列表然后实现增删改。
列表和元组可以互相转换
#元组转化列表
tup = (1,2,3)
lis = list(tup)
#列表转化为元组
a = tuple(lis)
其实我个人觉得,暂时可以理解为,元组就像是列表的常量
Zip,将多个列表合并成一个元组
a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
d = zip(a,b,c)
print(tuple(d))
字典
字典是“键值对”的无序可发序列,字典中的每个元素都是一个“键值对”,包含:“键 对象”和“值对象”。可以通过“键对象”实现快速获取、删除、更新对应的“值对象”。
列表中我们通过“下标数字”找到对应的对象。字典中通过“键对象”找到对应的“值 对象”。“键”是任意的不可变数据,比如:整数、浮点数、字符串、元组。但是:列表、 字典、集合这些可变对象,不能作为“键”。并且“键”不可重复。
和C++,Java里面的Map差不多
字典的创建
#方法一:
dic = {1:"小明",2:"小张",3:"小刚"}
print(dic)
#方法二:
a = [1,2,3]
b = ["小明","小张","小刚"]
dic2 = dict(zip(a,b))
print(dic2)
#方法三
ar = dict.fromkeys([1,2,3])
print(ar)
字典元素的访问
dic = {1:"小明",2:"小张",3:"小刚"}
#通过 [键] 获得“值”。若键不存在,则抛出异常。
print(dic[2])
# 通过 get()方法获得“值”。推荐使用。
#优点是:指定键不存在,返回None;
# 也可以设定指定键不存在时默认返回的对象。推荐使用 get()获取“值对象”。
print(dic.get(2))
dic = {1:"小明",2:"小张",3:"小刚"}
#列出所有的键值对
print(dic.items())
#列出所有的键,列出所有的值
print(dic.keys())
print(dic.values())
# len() 键值对的个数
print(len(dic))
#判断键是否存在
print(2 in dic)
字典元素添加、修改、删除
dic = {1:"小明",2:"小张",3:"小刚"}
#新增键值对
dic[4] = '小海'
print(dic)
#如果键不存在则新增,如果存在则覆盖
dic[1] = '小赵'
print(dic)
#=============================================================
#使用 update()将新字典中所有键值对全部添加到旧字典对象上。
# 如果key 有重复,则直接覆盖。
dic2 = {4:"小海",5:"小凯",1:"小刘"}
dic.update(dic2)
print(dic)
#=============================================================
#字典中元素的删除,可以使用 del()方法
del(dic[2])
print(dic)
# 或者 clear()删除所有键值对;pop()删除指定键值对,并返回对应的 “值对象”
data = dic.pop(1)
print(data)
#随机删除返回键值对
dic.popitem()
print(dic)
序列解包
序列解包可以用于元组、列表、字典。序列解包可以让我们方便的对多个变量赋值。
(a,b,c) = [1,2,3]
print(a)
print(b)
print(c)
序列解包用于字典时,默认是对“键”进行操作; 如果需要对键值对操作,则需要使用 items();如果需要对“值”进行操作,则需要使用 values()
#默认是键
dic = {1:"小明",2:"小刚",3:"小刘"}
a,b,c = dic
print(a)
print(b)
print(c)
dic = {1:"小明",2:"小刚",3:"小刘"}
#对键值对进行操作
a,b,c = dic.items();
print(a)
#对值进行操作
d,e,f = dic.values()
print(d)
集合
集合是无序可变,元素不能重复,实际上集合底层是字典实现。集合中的所有元素都是字典中的键对象,因此是唯一的
方法基本上差的不多
Python 对集也提供了并集、交集、差集等运算,和数学中的概念一样
>>> a = {1,3,'alvin'}
>>>> b = {'he','it','alvin'}
>>>> a|b #幵集 {1, 3, 'alvin', 'he', 'it'}
>>>> a&b #交集 {'alvin'}
>>>> a-b #巩集 {1, 3}
>>>> a.union(b) #幵集 {1, 3, 'alvin', 'he', 'it'}
>>>> a.intersection(b) #交集 {'alvin'}
>>>> a.difference(b) #巩集 {1, 3}