Python学习摘记
这几天在学习python,这里零星的记点,以备后用!
Python学习摘记:
3.1 Dictionary(字典)
Dictionary 是 Python 的内置数据类型之一,它定义了键和值之间一对一的关系。用{}来定义。
d={”key”:value, “key1″:”value1″}
(1) 在一个 dictionary 中不能有重复的 key。给一个存在的 key 赋值会覆盖原有的值。
(2) 在任何时候都可以加入新的 key-value 对。这种语法同修改存在的值是一样的。(是的,它可能某天会给您带来麻烦。假设你一次次地修改一个 dictionary,但其间您使用的 key 并未按照您的想法进行改变。您可能以为加入了新值,但实际上只是一次又一次地修改了同一个值。)
(3) Dictionary 的 key 是大小写敏感的
(4) 在 dictionary 中混用数据类型
Dictionary 不只是用于存储字符串。Dictionary 的值可以是任意数据类型,包括字符串、整数、对象,甚至其它的 dictionary。在单个 dictionary 里,dictionary 的值并不需要全都是同一数据类型,可以根据需要混用和匹配。
Dictionary 的 key 要严格多了,但是它们可以是字符串、整数或几种其它的类型 (后面还会谈到这一点)。也可以在一个 dictionary 中混用和匹配 key 的数据类型。
(5) Dictionary 没有元素顺序的概念。说元素 “顺序乱了” 是不正确的,它们只是序偶的简单排列。这是一个重要的特性,它会在您想要以一种特定的,可重现的顺序 (像以 key 的字母表顺序) 存取 dictionary 元素的时候骚扰您。有一些实现这些要求的方法,它们只是没有加到 dictionary 中去。
1. 修改 Dictionary
d["uid"] = “sa”
2. 增加 Dictionary
d[1]=”value1″ # 直接增加一个不存在的key即可
3. 删除 Dictionary
(1) del d["host"]
(2) d.clear
del 允许您使用 key 从一个 dictionary 中删除独立的元素。
clear 从一个 dictionary 中清除所有元素。注意空的大括号集合表示一个没有元素的 dictionary。
3.2 List 介绍
List 是 Python 中使用最频繁的数据类型。用[]来定义。
li = ["a", "b", "mpilgrim", "z", "example"]
(1) List 可以作为以 0 下标开始的数组。任何一个非空 list 的第一个元素总是 li[0]
(2) 负数索引从 list 的尾部开始向前计数来存取元素。任何一个非空的 list 最后一个元素总是 li[-1]。
(3) 如果负数索引使您感到糊涂,可以这样理解:li[-n] == li[len(li) - n]。所以在这个 list 里,li[-3] == li[5 - 3] == li[2]
1. list 的分片 (slice)
li[1:3] = ['b', 'mpilgrim']
li[1:-1] = ['b', 'mpilgrim', 'z']
(1) 您可以通过指定 2 个索引得到 list 的子集,叫做一个 “slice” 。返回值是一个新的 list,它包含了 list 中按顺序从第一个 slice 索引 (这里为 li[1]) 开始,直到但是不包括第二个 slice 索引 (这里为 li[3]) 的所有元素。
(2) 如果一个或两个 slice 索引是负数,slice 也可以工作。如果对您有帮助,您可以这样理解:从左向右阅读 list,第一个 slice 索引指定了您想要的第一个元素,第二个 slice 索引指定了第一个您不想要的元素。返回的值为在其间的每个元素。
(3) List 从 0 开始,所以 li[0:3] 返回 list 的前 3 个元素,从 li[0] 开始,直到但不包括 li[3]。
li[:3] = li[0:3]
li[3:]=li[3:5] 如果右侧分片索引是 list 的长度,可以将其省略。所以 li[3:] 同 li[3:5] 是一样的,因为这个 list 有 5 个元素。
(4) li[:n] 总是返回前 n 个元素,而 li[n:] 将返回剩下的元素,不管 list 有多长
(5) 如果将两个分片索引全部省略,这将包括 list 的所有元素。但是与原始的名为 li 的 list 不同,它是一个新 list,恰好拥有与 li 一样的全部元素。li[:] 是生成一个 list 完全拷贝的一个简写。
1. 向 list 中增加元素
li.append(”new”) # append 向 list 的末尾追加单个元素
li.insert(2, “new”) # insert 将单个元素插入到 list 中。数值参数是插入点的索引。请注意,list 中的元素不必唯一,现在有 两个独立的元素具有 ‘new’ 这个值,li[2] 和 li[6]。
li.extend(["two", "elements"]) # extend 用来连接 list。请注意不要使用多个参数来调用 extend,要使用一个 list 参数进行调用。在本例中,这个 list 有两个元素。
Lists 的两个方法 extend 和 append 看起来类似,但实际上完全不同:
(1) extend 接受一个参数,这个参数总是一个 list,并且把这个 list 中的每个元素添加到原 list 中。
(2) append 接受一个参数,这个参数可以是任何数据类型,并且简单地追加到 list 的尾部。在这里使用一个含有 3 个元素的 list 参数调用 append 方法。li.append(['d', 'e', 'f']) = ['a', 'b', 'c', ['d', 'e', 'f']]
2. 搜索 list
li.index(”example”) = 5
(1) index 在 list 中查找一个值的首次出现并返回索引值
(2) index 在 list 中查找一个值的首次 出现。这里 ‘new’ 在 list 中出现了两次,在 li[2] 和 li[6],但 index 只返回第一个索引,2。
(3) 要测试一个值是否在 list 内,使用 in。如果值存在,它返回 True,否则返为 False
‘c’ in li = True
0 为 false; 其它所有数值皆为 true。
空串 (”") 为 false; 其它所有字符串皆为 true。
空 list ([]) 为 false; 其它所有 list 皆为 true。
空 tuple (()) 为 false; 其它所有 tuple 皆为 true。
空 dictionary ({}) 为 false; 其它所有 dictionary 皆为 true。
请注意第一个字母是大写的;这些值如同在 Python 中的其它东西一样都是大小写敏感的。
3. 从 list 中删除元素
li.remove(”z”)
li.pop()
(1) remove 仅仅 删除一个值的首次出现。
(2) 如果在 list 中没有找到值,Python 会引发一个异常来响应 index 方法。
(3) pop 是一个有趣的东西。它会做两件事:删除 list 的最后一个元素,然后返回删除元素的值。请注意,这与 li[-1] 不同,后者返回一个值但不改变 list 本身。也不同于 li.remove(value),后者改变 list 但并不返回值。
4. List 运算符
(1) Lists 也可以用 + 运算符连接起来。list = list + otherlist 相当于 list.extend(otherlist)。但 + 运算符把一个新 (连接后) 的 list 作为值返回,而 extend 只修改存在的 list。也就是说,对于大型 list 来说,extend 的执行速度要快一些。
(2) Python 支持 += 运算符。li += ['two'] 等同于 li.extend(['two'])。+= 运算符可用于 list、字符串和整数,并且它也可以被重载用于用户自定义的类中.
(3) * 运算符可以作为一个重复器作用于 list。li = [1, 2] * 3 等同于 li = [1, 2] + [1, 2] + [1, 2],即将三个 list 连接成一个
3.3 Tuple 介绍
1. Tuple定义:
Tuple 是不可变的 list。一旦创建了一个 tuple,就不能以任何方式改变它。用()定义
t = (”a”, “b”, “mpilgrim”, “z”, “example”)
(1) 定义 tuple 与定义 list 的方式相同,但整个元素集是用小括号包围的,而不是方括号。
(2) Tuple 的元素与 list 一样按定义的次序进行排序。Tuples 的索引与 list 一样从 0 开始,所以一个非空 tuple 的第一个元素总是 t[0]
(3) 负数索引与 list 一样从 tuple 的尾部开始计数
(4) 与 list 一样分片 (slice) 也可以使用。注意当分割一个 list 时,会得到一个新的 list ;当分割一个 tuple 时,会得到一个新的 tuple
(5) 不能增加,修改,删除Tuple,不能用 index 来查找,可以使用 in 来查看一个元素是否存在于 tuple 中。
2. 使用 tuple 有什么好处:
(1) Tuple 比 list 操作速度快。如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用 tuple 代替 list
(2) 如果对不需要修改的数据进行 “写保护”,可以使代码更安全。使用 tuple 而不是 list 如同拥有一个隐含的 assert 语句,说明这一数据是常量。如果必须要改变这些值,则需要执行 tuple 到 list 的转换 (需要使用一个特殊的函数)。
(3) Tuples 可以在 dictionary 中被用做 key,但是 list 不行。实际上,事情要比这更复杂。Dictionary key 必须是不可变的。Tuple 本身是不可改变的,但是如果您有一个 list 的 tuple,那就认为是可变的了,用做 dictionary key 就是不安全的。只有字符串、整数或其它对 dictionary 安全的 tuple 才可以用作 dictionary key。
(4) Tuples 可以用在字符串格式化中,我们会很快看到
(5) Tuple 可以转换成 list,反之亦然。内置的 tuple 函数接收一个 list,并返回一个有着相同元素的 tuple。而 list 函数接收一个 tuple 返回一个 list。从效果上看,tuple 冻结一个 list,而 list 解冻一个 tuple。