Python 变量(下)

列表


列表是可修改的序列类型。所以列表不可以作为字典的键。

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) 删除元素,如果没有找到元素,抛出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}

 


posted @ 2018-06-25 18:41  KadyCui  阅读(257)  评论(0编辑  收藏  举报