Python基础-2
列表、元组与字典、集合
#创建列表的两种方式
empty_list = []
empty_list
empty_list = list()
empty_list
列表常见操作
长度:用 len 查看列表长度
加法: 相当于将两个列表按顺序连接
乘法:列表与整数相乘,相当于将列表重复相加
append:向列表添加单个元素
l.append(ob) 将元素 ob 添加到列表 l 的最后。
extend: 向列表添加序列元素
l.extend(lst) 将序列 lst 的元素依次添加到列表 l 的最后,作用相当于 l += lst。
insert: 插入元素
l.insert(idx, ob) 在索引 idx 处插入 ob ,之后的元素依次后移。
a = [10, 11, 12]
a.append(11)
print(a)
a = [10, 11, 12]
a.append(['a', 'b'])
print(a)
a = [10, 11, 12]
a.extend(['a', 'b'])
print(a)
a = [10, 11, 12, 13, 11]
# 在索引 3 插入 'a'
a.insert(3, 'a')
print(a)
del:根据下标进行删除
pop:弹出元素
l.pop(idx) 会将索引 idx 处的元素删除,并返回这个元素。未指定 idx 时,默认为列表最后一个元素。
remove:根据元素的值进行删除
l.remove(ob) 会将列表中第一个出现的 ob 删除,如果 ob 不在 l 中会报错。
# 根据下标进行删除
a = [1002, 'a', 'b', 'c']
del a[0]
print(a)
a = [1002, 'a', 'b', 'c']
a.pop()
print(a)
a = [1002, 'a', 'b', 'c', 'b']
a.remove("b")
print(a)
l.index(ob) 返回列表中元素 ob 第一次出现的索引位置,如果 ob 不在 l 中会报错。
sort方法将 list 按特定顺序重新排列,默认为由小到大,参数 reverse=True 可改为倒序,由大到小
如果不想改变原来列表中的值,可以使用 sorted 函数:
a = [10, 1, 11, 13, 11, 2]
b = sorted(a)
print("a:",a)
print("b:",b)
l.reverse() 会将列表中的元素从后向前排列。
a = [10, 1, 11, 13, 11, 2]
a.reverse()
print(a)
列表是可变的,字符串是不可变的,通过索引改变会报错,
字符串方法只是返回一个新字符串,并不改变原来的值,
如果想改变字符串的值,可以用重新赋值的方法.
其一,列表可以通过以下的方法改变,而字符串不支持这样的变化。
此时, a 和 b 指向同一块区域,改变 b 的值, a 也会同时改变:
a = [1, 2, 3, 4]
b = a
b[0] = 100
a
与列表相似,元组Tuple也是个有序序列,但是元组是不可变的,用()生成。可以索引,切片:
t = (10, 11, 12, 13, 14)
t
将列表转换为元组:
a = [10, 11, 12, 13, 14]
tuple(a)
Python 使用 {} 或者 dict() 来创建一个空的字典:
a = {}
type(a)
a = dict()
type(a)
有了dict之后,可以用索引键值的方法向其中添加元素,也可以通过索引来查看元素的值:
a["one"] = "this is number 1"
a["two"] = "this is number 2"
a
a['one']
#更新键值
a["one"] = "this is number 1, too"
a
Python中不能用支持用数字索引按顺序查看字典中的值,而且数字本身也有可能成为键值,这样会引起混淆。
出于hash的目的,Python中要求这些键值对的键必须是不可变的,而值可以是任意的Python对象。
除了通常的定义方式,还可以通过 dict() 转化来生成字典:
inventory = dict(
[('foozelator', 123),
('frombicator', 18),
('spatzleblock', 34),
('snitzelhogen', 23)
])
inventory
利用索引直接更新键值对:
inventory['frombicator'] += 1
inventory
有时候,也可以使用元组作为键值,例如,可以用元组做键来表示从第一个城市飞往第二个城市航班数的多少:
connections = {}
connections[('New York', 'Seattle')] = 100
connections[('Austin', 'New York')] = 200
connections[('New York', 'Austin')] = 400
print (connections[('Austin', 'New York')])
print (connections[('New York', 'Austin')])
之前已经见过,用索引可以找到一个键对应的值,但是当字典中没有这个键的时候,Python会报错,这时候可以使用字典的 get 方法来处理这种情况,其用法如下:
d.get(key, default = None)
a = {}
a["one"] = "this is number 1"
a["two"] = "this is number 2"
print (a.get("three"))
#指定默认值参数:
a.get("three", "undefined")
pop 方法可以用来弹出字典中某个键对应的值,同时也可以指定默认参数:
与列表一样,del 函数可以用来删除字典中特定的键值对
d.pop(key, default = None)
a.pop("two")
#弹出不存在的键值:
a.pop("two", 'not exist')
del a["one"]
a
之前已经知道,可以通过索引来插入、修改单个键值对,但是如果想对多个键值对进行操作,这种方法就显得比较麻烦,好在有 update 方法:
person = {}
person['first'] = "Jmes"
person['last'] = "Maxwell"
person['born'] = 1831
print (person)
person_modifications = {'first': 'James', 'middle': 'Clerk'}
person.update(person_modifications)
print (person)
keys 方法,values 方法和items 方法
d.keys()
返回一个由所有键组成的列表;
d.values()
返回一个由所有值组成的列表;
d.items()
返回一个由所有键值对元组组成的列表;
之前看到的列表和字符串都是一种有序序列,而集合 set 是一种无序的序列。
因为集合是无序的,所以当集合中存在两个同样的元素的时候,Python只会保存其中的一个(唯一性);同时为了确保其中不包含同样的元素,集合中放入的元素只能是不可变的对象(确定性)。
可以用set()函数来显示的生成空集合:
也可以使用一个列表来初始化一个集合:
a = set()
type(a)
a = set([1, 2, 3, 1])
a
集合会自动去除重复元素 1。
可以看到,集合中的元素是用大括号{}包含起来的,这意味着可以用{}的形式来创建集合:
a = {1, 2, 3, 1}
a
但是创建空集合的时候只能用set来创建,因为在Python中{}创建的是一个空的字典
两个集合的并,返回包含两个集合所有元素的集合(去除重复)。
可以用方法 a.union(b) 或者操作 a | b 实现。
a.union(b)
b.union(a)
a | b
两个集合的交,返回包含两个集合共有元素的集合。
可以用方法 a.intersection(b) 或者操作 a & b 实现。
a 和 b 的差集,返回只在 a 不在 b 的元素组成的集合。
可以用方法 a.difference(b) 或者操作 a - b 实现。
a 和b 的对称差集,返回在 a 或在 b 中,但是不同时在 a 和 b 中的元素组成的集合。
可以用方法 a.symmetric_difference(b) 或者操作 a ^ b 实现(异或操作符)。
要判断 b 是不是 a 的子集,可以用 b.issubset(a) 方法,或者更简单的用操作 b <= a :
与之对应,也可以用 a.issuperset(b) 或者 a >= b 来判断:
方法只能用来测试子集,但是操作符可以用来判断真子集:
add 方法向集合添加单个元素
跟列表的 append 方法类似,用来向集合添加单个元素。
update 方法向集合添加多个元素
跟列表的extend方法类似,用来向集合添加多个元素。
remove 方法移除单个元素
由于集合没有顺序,不能像列表一样按照位置弹出元素,所以pop 方法删除并返回集合中任意一个元素,如果集合中没有元素会报错。
discard 方法
作用与 remove 一样,但是当元素在集合中不存在的时候不会报错。