【Python 3这件小事】2.内置数据类型(二)——列表和元组

(接上文)

2.4 列表

Python 中的列表更像 Java 中的数组(尽管可以把列表当做生命中所需要的一切来使用)。一个更好的比喻可能是 ArrayList 类,该类可以容纳任何对象,并可在添加新元素时进行动态拓展。

在布尔类型上下文环境中,空列表为假值。任何至少包含一个以上元素的列表为真值。

 

2.4.1 创建列表

  1.列表是元素的有序集合,用【】将各个元素括起来。

  2.列表的首个元素为list[0]。

  3.使用负索引值可从列表的尾部向前计数访问元素。如list[-1]就表示列表的倒数第一个元素。

  4.如果负数令你混淆,可将其视为如下方式: a_list[-n] == a_list[len(a_list) - n] 。因此在此列表中, a_list[-3] == a_list[5 - 3] == a_list[2]

 

2.4.2 列表切片

  1.通过指定两个索引值,可以从列表中获取称作“切片”的某个部分。返回值是一个新列表,它包含列表中所有元素,按顺序从第一个切片索引开始(本例中为 a_list[1]),截止但不包含第二个切片索引。换句话说,第二个索引值是第一个不想到达的索引。

  2.如果左切片索引为零,可以将其留空而将零隐去。因此 a_list[:3] 与 a_list[0:3] 是完全相同的,因为起点 0 被隐去了。

  3.如果两个切片索引都留空,那么将包括列表所有的元素。但该返回值与最初的 a_list 变量并不一样。它是一个新列表,只不过恰好拥有完全相同的元素而已。a_list[:] 是对列表进行复制的一条捷径。

 

2.4.3 向列表中新增项

有四种方法可以完成向列表中新增项的工作:

  1.+ 运算符: 连接列表以创建一个新列表。列表可包含任何数量的元素;没有大小限制(除了可用内存的限制)。

  2.append() 方法:向列表的尾部添加一个新的元素。

  3.extend() 方法:只接受一个列表作为参数,并将该参数的每个元素都添加到原有的列表中。

  4.insert() 方法:将单个元素插入到列表中。第一个参数是列表中将被顶离原位的第一个元素的位置索引。如:a_list.insert(0,'Ω')  

 

注意:

  1.列表中的元素并不一定要是唯一的

  2.append()方法和extend()方法的区别:append方法接受的参数可以是任意类型,并把这个接受的参数当作一个元素插入到列表中,extend方法接受的参数必须是列表,并且将参数列表中的每个元素添加到原来的列表中去,这就是“加入”和“扩展”的区别。

 

2.4.4 在列表中检索值

  1. count() 方法:返回了列表中某个特定值出现的次数。

  2.in 运算符:判断某个值是否在列表中出现,返回 True 或 False;它不会告诉你该值出现在什么位置。

  3. index() 方法:返回某个值在列表中的精确位置。尽管可以通过第二个参数(以 0 为基点的)索引值来指定起点,通过第三个参数(以 0 基点的)索引来指定搜索终点,但缺省情况下它将搜索整个列表。

  4.index() 方法将查找某值在列表中的第一次出现。在该情况下,'new' 在列表中出现了两次,分别为 a_list[2] 和 a_list[4],但 index() 方法将只返回第一次出现的位置索引值。

  5.如果在列表中没有找到该值,index() 方法将会引发一个例外。有别于其他的一些语言(如Java),它不会返回一个值如-1.

 

2.4.5 从列表中删除元素

也有几种方法可从列表中删除元素。

  1.del语句:可使用 del 语句从列表中删除某个特定元素。如:del list[1]。删除索引 1 之后再访问索引 1 将 不会 导致错误。被删除元素之后的所有元素将移动它们的位置以“填补”被删除元素所产生的“缝隙”。

  2.remove() 方法:通过值而不是索引删除元素(del 语句通过索引,remove方法通过值)。remove() 方法接受一个 value 参数,并删除列表中该值的第一次出现

  3.pop():如果不带参数调用, pop() 列表方法将删除列表中最后的元素,并返回所删除的值。相当于出栈操作。可以从列表中 pop[弹出]任何元素。只需传给 pop() 方法一个位置索引值。对空列表调用 pop() 将会引发一个例外。

 

2.5 元组

元组 是不可变的列表。一旦创建之后,用任何方法都不可以修改元素。

在布尔类型上下文环境中,空元组为假值。任何至少包含一个上元素的元组为真值。元素的值无关紧要。

  1.元组的定义方式和列表相同,除了整个元素的集合都用圆括号(),而不是方括号【】闭合。对比列表和元组:【】和()。

  2.元组和列表的主要区别是元组不能进行修改。其余的如index、切片等操作都是一致的。

 

那么元组有什么好处呢?

  • 元组的速度比列表更快。如果定义了一系列常量值,而所需做的仅是对它进行遍历,那么请使用元组替代列表。
  • 对不需要改变的数据进行“写保护”将使得代码更加安全。使用元组替代列表就像是有一条隐含的 assert 语句显示该数据是常量,特别的想法(及特别的功能)必须重写。
  • 一些元组可用作字典键(特别是包含字符串、数值和其它元组这样的不可变数据的元组)。列表永远不能当做字典键使用,因为列表不是不可变的。

 

元组的特殊操作:同时赋多个值

>>> v = ('a', 2, True)
>>> (x, y, z) = v       
>>> x
'a'
>>> y
2
>>> z
True

v 是一个三元素的元组,而 (x, y, z) 是包含三个变量的元组。将其中一个赋值给另一个将会把 v 中的每个值按顺序赋值给每一个变量。

 

 

posted @ 2013-03-24 16:32  Sayary  阅读(976)  评论(0编辑  收藏  举报