python study daily(1)----about dictionary ,list..


                学习python几天了.以下记录了自己的一些所得.以作备忘之用.
一. Dictionary 是 Python 的内置数据类型之一, 它定义了键和值之间一对一的关系。
例:定义一个字典d
>>>d = {"server":"mpilgrim",      
        "database":"master","key":"k_value"}  
1.在一个 dictionary 中不能有重复的 key。给一个存在的 key 赋值会覆盖原有的值。
2.可以通过 key 来引用其值, 但是不能通过值获取 key.
3.Dictionary 没有元素顺序的概念.
4.dictionary 的 key 是大小写敏感的
5.Dictionary 不只是用于存储字符串。Dictionary 的值可以是任意数据类型, 包括字符串, 整数, 对象, 甚至其它的
dictionary。在单个 dictionary 里, dictionary 的值并不需要全都是同一数据类型, 可以根据需要混用和匹配.
6.Dictionary 的 key 要严格多了, 但是它们可以是字符串, 整数和几种其它的类型 。也可以在一个 dictionary 中混用和配匹 key 的数据类型。
7.del 允许您使用 key 从一个 dictionary 中删除独立的元素。
8.clear 从一个 dictionary 中清除所有元素。注意空的大括号集合表示一个没有元素的 dictionary.
二.List 是 Python 中使用最频繁的数据类型.
例:定义一个List
li = ["a", "b", "mpilgrim", "z", "example"]
1.List支持正索引从li[0]开始是li中第一个元素.支持负索引从li[-1]开始是li中最后一个元素.
2.支持分片将两个分片索引全部省略, 这将包括 list 的所有元素。但是与原始的名为 li 的 list 不同, 它是一个新 list, 恰好拥有与 li 一样的全部元素。li[:] 是生成一个 list 完全拷贝的一个简写.
3.append 向 list 的末尾追加单个元素。
4.insert 将单个元素插入到 list 中。数值参数是插入点的索引。请注意, list 中的元素不必唯一, 现在有两个独立的元素具有 'new' 这个值, li[2] 和 li[6].
5.extend 用来连接 list。请注意不要使用多个参数来调用 extend, 要使用一个 list 参数进行调用。在本例中, 这个 list 有两个元素。
6.在这里 list 中有 3 个元素 ('a', 'b' 和 'c'), 并且使用另一个有 3 个元素 ('d', 'e' 和 'f') 的 list 扩展之, 因此新的 list 中有 6 个元素。
7.在这里 list 中有 3 个元素 ('a', 'b' 和 'c'), 并且使用另一个有 3 个元素 ('d', 'e' 和 'f') 的 list 扩展之, 因此新的 list 中有 6 个元素。
8.另一方面, append 接受一个参数, 这个参数可以是任何数据类型, 并且简单地追加到 list 的尾部。  在这里使用一个含有 3 个元素的 list 参数调用 append 方法。
9.原来包含 3 个元素的 list 现在包含 4 个元素。 为什么是 4 个元素呢?  因为刚刚追加的最后一个元素 本身是个 list。  List 可以包含任何类型的数据, 也包括其他的 list。  这或许是您所要的结果, 或许不是。 如果您的意图是  extend, 请不要使用 append。
10.index 在 list 中查找一个值的首次出现并返回索引值
11.index 在 list 中查找一个值的首次出现。 这里 'new' 在 list 中出现了两次, 在 li[2] 和 li[6], 但 index 只返回第一个索引, 2.
12.如果在 list 中没有找到值, Python 会引发一个异常。这一点与大部分的语言截然不同, 大部分语言会返回某个无效索引。尽管这种处理可能令人讨厌, 但它仍然是件好事, 因为它说明您的程序会由于源代码的问题而崩溃, 好于在后面当您使用无效索引而引起崩溃。
13.要测试一个值是否在 list 内, 使用 in, 如果值存在, 它返回 True, 否则返为 False 。
14.remove 从 list 中删除一个值的首次出现。
15.remove 仅仅 删除一个值的首次出现。 在这里, 'new' 在 list 中出现了两次, 但 li.remove("new") 只删除了 'new' 的首次出现。
16.如果在 list 中没有找到值, Python 会引发一个异常来响应 index 方法。
17.pop 是一个有趣的东西。它会做两件事: 删除 list 的最后一个元素, 然后返回删除元素的值。请注意, 这与 li[-1] 不同, 后者返回一个值但不改变 list 本身。也不同于 li.remove(value), 后者改变 list 但并不返回值。
18.Lists 也可以用 + 运算符连接起来。  list = list + otherlist 相当于 list.extend(otherlist)。  但 + 运算符把一个新 (连接后) 的 list 作为值返回, 而 extend 只修改存在的 list。 也就是说, 对于大型 list 来说, extend 的执行速度要快一些。
19.Python 支持 += 运算符。  li += ['two'] 等同于 li.extend(['two'])。  += 运算符可用于 list, 字符串和整数, 并且它也可以被重载用于用户自定义的类中
20.* 运算符可以作为一个重复器作用于 list。 li = [1, 2] * 3 等同于 li = [1, 2] + [1, 2] + [1, 2], 即将三个 list 连接成一个。
三.Tuple 是不可变 list。 一旦创建了一个 tuple 就不能以任何方式改变它。
1.定义 tuple 与定义 list 的方式相同, 除了整个元素集是用小括号包围的而不是方括号。
2.Tuple 的元素与 list 一样按定义的次序进行排序。 Tuples 的索引与 list 一样从 0 开始, 所以一个非空 tuple 的第一个元素总是 t[0]
3.负数索引与 list 一样从 tuple 的尾部开始计数。
4.与 list 一样分片 (slice) 也可以使用。注意当分割一个 list 时, 会得到一个新的 list ;当分割一个 tuple 时, 会得到一个新的 tuple。
5.不能向 tuple 增加元素。Tuple 没有 append 或 extend 方法。不能从 tuple 删除元素。Tuple 没有 remove 或 pop 方法。不能在 tuple 中查找元素。Tuple 没有 index 方法。可以使用 in 来查看一个元素是否存在于 tuple 中。
6.优势:
  • Tuple 比 list 操作速度快。如果您定义了一个值的常量集, 并且唯一要用它做的是不断地遍历它, 请使用 tuple 代替 list。
  • 如果对不需要修改的数据进行 “写保护”, 可以使代码更安全。使用 tuple 而不是 list 如同拥有一个隐含的 assert 语句, 说明这一数据是常量。如果必须要改变这些值, 则需要执行 tuple 到 list 的转换 (需要使用一个特殊的函数)。
  • 还记得我说过
    [url=file:///tmp/fr-4IC07j/diveintopython-htmlflat-5.4_zh-ch/html/diveintopython.html#odbchelper.dictionarytypes]dictionary  keys[/url]
    可以是字符串, 整数和 “其它几种类型”
    吗? Tuples 就是这些类型之一。 Tuples 可以在 dictionary 中被用做 key, 但是 list 不行。实际上,
    事情要比这更复杂。Dictionary key 必须是不可变的。Tuple 本身是不可改变的, 但是如果您有一个 list 的 tuple,
    那就认为是可变的了, 用做 dictionary key 就是不安全的。只有字符串, 整数或其它对 dictionary 安全的 tuple
    才可以用作 dictionary key。
  • Tuples 可以用在字符串格式化中, 我们会很快看到.
7.Tuple 可以转换成 list, 反之亦然。内置的 tuple  函数接收一个 list, 并返回一个有着相同元素的 tuple。而 list 函数接收一个 tuple 返回一个 list。从效果上看, tuple 冻结一个 list, 而 list 解冻一个 tuple。