9 元组与for循环

之前讲述的列表、字符串都是有序集合类型,元组tuple也是有序集合,和list列表、字符串一样可以通过索引index即位置信息来访问元组的各个元素,与list不同的是元组tuple是只读的,不可通过index方式去修改某位置上的数据值,即只可以做表达式的右值而不能做左值。

9.1 元组基础

元组的定义

定义一个元组很简单,将一堆数据用圆括号括起来,用逗号间隔各个元素即可定义一个元组,元组里的数据是只读的不可被修改。

变量名 = (元素值序列)

索引访问元组语法

定义好了元组以后可以通过元组名+index的方式读元组里某位置上的数据,语法格式如下所示。

元组名[index]

例1 定义、使用元组

a = (12,45, 67, 98)
print a[0]
a[0] = 21
print a[0]

运行程序得到如下内容:

12
Traceback (most recent call last):
  File "tuple.py", line 3, in <module>
    a[0] = 21
TypeError: 'tuple' object does not support item assignment

从程序执行的结果,可以看到代码第3行有问题,由于a是元组,a[0]可以访问元组a的第0位置上的数据值,例如代码第2行,作右值。但不能修改该位置上的数据a[0] = 21试图修改元组a的第0位置上的即a[0]的值。

例子如果改为列表,程序是没有任何问题的,因为列表里的数据是可被修改的。

a = [12,45, 67, 98]
print a[0]
a[0] = 21
print a[0]

运行程序得到如下结果。

12
21

没有报错,因为列表可以通过索引index作左值(代码第3行)去修改index位置上的数据的值。

9.2 元组的应用

元组可以存储程序里只读的有序序列数据,但在Python里,元组通常是用于python访问数据库时从数据库提取回结果集时的数据类型,这个问题待数据库一节继续学习,这里就不提前剧透了。

9.3 for循环体

在计算机语言里常用的循环体结构除了while循环体外,还有一种简式循环体结构for循环体,python的for循环体和C语言的循环体有些不同。

c语言的for循环体

int i = 0;
for(i = 0; i < 10; i++){
    printf("%d\n", i);
}

Python语言的循环体

for var in sequence:
    print var

怎样理解Python的这个for循环体的结构呢?for 和in是for循环体的关键字,in 关键字后跟一个有序序列类型,每次从in后的sequence里取一个值付给for关键字后的变量var,in后的sequence有序类型的集合有多少个元素,for下的语句块就被执行多少次,这种遍历方式在Python里称迭代

Python的for循环体语法结构需要注意两点:首先是sequence后要用冒号(:),其次是for下的语句块要按Tab键缩进对齐。

例2 打印1~100

a = range(1, 101)
print a[:10]
for x in a[:6]:
    print x    

运行程序得到如下结果。

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1
2
3
4
5