列表
列表是可修改的序列类型。所以列表不可以作为字典的键。
1 >>> a = [1] 2 >>> hash(a) 3 Traceback (most recent call last): 4 File "<pyshell#1>", line 1, in <module> 5 hash(a) 6 TypeError: unhashable type: 'list'
如果调用hash()函数抛出异常TypeError。
列表的操作:
- 赋值操作:s[i] = x
- 赋值操作:s[i:j] = t
- 删除操作:del s[i:j] 相当于 s[i:j] = []
- 赋值操作:s[i:j:k] = t
- 删除操作:del s[i:j:k]
- 添加元素到末尾:s.append(x)
- 删除整个列表的元素:s.clear()
- 浅复制:s.copy() 相当于 s[:]
- 扩展列表:s.extend(t) 或者 s += t
- 复制内容n次:s* = n
- 在位置i,出入元素:s.insert(i,x)
- 弹出:s.pop([i])弹出位置 i 的元素,并返回, i 是可选的,默认弹出列表末尾的元素
- 删除:s.remove(x) 删除元素 x ,如果没有找到元素,抛出ValueError异常
- 倒序:s.reverse()
举例:
1 >>>s = [1,3] 2 >>> s 3 [1, 3] 4 >>> s.extend([4]) 5 >>> s 6 [1, 3, 4] 7 >>> s += [6,7] 8 >>> s 9 [1, 3, 4, 6, 7] 10 >>> s *= 2 11 >>> s 12 [1, 3, 4, 6, 7, 1, 3, 4, 6, 7] 13 >>> s.insert(3, 10) 14 >>> s 15 [1, 3, 4, 10, 6, 7, 1, 3, 4, 6, 7] 16 >>> s.pop() 17 7 18 >>> s 19 [1, 3, 4, 10, 6, 7, 1, 3, 4, 6] 20 >>> s.pop(3) 21 10 22 >>> s 23 [1, 3, 4, 6, 7, 1, 3, 4, 6] 24 >>> s.remove(1) 25 >>> s 26 [3, 4, 6, 7, 1, 3, 4, 6] 27 >>> s.reverse() 28 >>> s 29 [6, 4, 3, 1, 7, 6, 4, 3] 30 >>> s.remove(100) 31 Traceback (most recent call last): 32 File "<stdin>", line 1, in <module> 33 ValueError: list.remove(x): x not in list
s.remove(e)只会删除一个元素。
元组
元组是不可变的序列类型。由于它的不可变,可作为字典的键。
1 >>> t = 1 2 >>> hash(t) 3 3430019387558
列表调用 hash() 函数会抛出 TypeError 异常,元组没有问题,返回的是一个整数。
元组的构造方式
使用一对小括号生成一个空的元组 ()
逗号加在一个字符末尾,声明一个元素的元组 2, 或者 (2,)
逗号分隔的元素 1,2,3 或者 (1,2,3)
利用 tuple() 函数,tuple() 或者 tuple(iterable)
1 >>> t = tuple() 2 >>> print(t) 3 () 4 >>> t = 1, 5 >>> print(t) 6 (1,) 7 >>> t[0] 8 1 9 >>> t[1] 10 Traceback (most recent call last): 11 File "<stdin>", line 1, in <module> 12 IndexError: tuple index out of range 13 >>> t2 = (1,2,3) 14 >>> print(t2) 15 (1, 2, 3) 16 >>> t3 = tuple([1,2,3,4]) 17 >>> print(t3) 18 (1, 2, 3, 4) 19 >>> t4 = tuple(range(10)) 20 >>> print(t4) 21 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) 22 >>> print(t4[3]) 23 3 24 >>> print(t4[3:8]) 25 (3, 4, 5, 6, 7)
列表和元组访问如果下标越界,会抛出IndexError 异常,例如元组越界会抛出 IndexError: tuple index out of range。
字典
Python中的字典是一个可映射的对象,映射是指一个可哈希化(hashable)的键值对应一个对象。字典是一个可变对象。
例如 {'name': 'alex', 'age': 18} ,声明了一个字典,对应两个映射对象,键姓名 name 对应一个字符串值alex,键年龄 age 对应一个整数 18。键 name 和 age 都是字符串,由于字符串是不可变的,可以哈希化,所以能够作为键值。字典的值不必是哈希化的,所以列表可以作为值。
字典的声明方式:
- {'one': 1}
- dict(**kwarg)
- dict(mapping, **kwarg)
- dict(iterable, **kwarg)
1 >>> a = dict(one=1, two=2, three=3) 2 >>> b = {'one': 1, 'two': 2, 'three': 3} 3 >>> a 4 {'one': 1, 'two': 2, 'three': 3} 5 >>> b 6 {'one': 1, 'two': 2, 'three': 3} 7 >>> c = dict(zip(['one', 'two', 'three'], [1,2,3])) 8 >>> c 9 {'one': 1, 'two': 2, 'three': 3} 10 >>> d = dict([('one', 1), ('two', 2), ('three', 3)]) 11 >>> d 12 {'one': 1, 'two': 2, 'three': 3}
字典的操作
- 返回字典长度 len(d)
- 返回键值 d[key],如果键不存在,抛出 KeyError
- 设置或更新键值 d[key] = value
- 从字典中删除键 del d[key],如果键不存在,抛出 KeyError
- key in d 判断一个键是否存在
- iter(d) 返回一个包含字典中所有键的迭代器
- d.clear() 清空字典
- classmethod fromkeys(seq, [value]) 从一个序列seq生成一个字典,value值是可选的,不传默认是 None,这是一个类方法。
- d.get(key[, default]) 获取键key的值。key不存在,则返回第二个参数default的值,如果第二个参数没有传,返回 None 类型。
- d.items() 返回键值对的一个视图对象,可以用for遍历,键值对是元组形式。
- d.keys() 返回键的一个视图对象,可以用for遍历
- d.pop(key[, default]) 弹出键key的值,没有则返回default值
- d.popitem() 弹出一个键值元组
- d.setdefault(key[, default]) 如果键key存在,返回值,不存在则设置字典key=default,返回default
- d.update(other) 从other更新字典,如果other中的键已经存在了,则覆盖原来的值。
- d.values() 返回所有值的视图对象,可以用for遍历
1 >>> d = {} 2 >>> d['one'] = 1 3 >>> d['two'] = 2 4 >>> d 5 {'one': 1, 'two': 2} 6 >>> del d['not_exists'] 7 Traceback (most recent call last): 8 File "<stdin>", line 1, in <module> 9 KeyError: 'not_exists' 10 >>> del d['one'] 11 >>> d 12 {'two': 2} 13 >>> d.clear() 14 >>> d 15 {} 16 >>> len(d) 17 0 18 >>> d = dict.fromkeys('abc', 2) 19 >>> d 20 {'a': 2, 'c': 2, 'b': 2} 21 >>> d.get('a', 100) 22 2 23 >>> d.get('f', 100) 24 100 25 >>> d 26 {'a': 2, 'c': 2, 'b': 2} 27 >>> for i in d.items(): print(i) 28 ... 29 ('a', 2) 30 ('c', 2) 31 ('b', 2) 32 >>> for i in d.keys(): print(i) 33 ... 34 a 35 c 36 b 37 >>> d['c'] = 5 38 >>> for i in d.values(): print(i) 39 ... 40 2 41 5 42 2 43 >>> d.pop('f') 44 Traceback (most recent call last): 45 File "<stdin>", line 1, in <module> 46 KeyError: 'f' 47 >>> d.pop('f', 99) 48 99 49 >>> d 50 {'a': 2, 'c': 5, 'b': 2} 51 >>> d.popitem() 52 ('a', 2) 53 >>> d 54 {'c': 5, 'b': 2} 55 >>> d.setdefault('c', 99) 56 5 57 >>> d 58 {'c': 5, 'b': 2} 59 >>> d.setdefault('e', 99) 60 99 61 >>> d 62 {'e': 99, 'c': 5, 'b': 2} 63 >>> d.update({'d': 8}) 64 >>> d 65 {'e': 99, 'c': 5, 'b': 2, 'd': 8}