(python learn) 6 -- 列表
列表和元组一样都是序列类型。类似的序列类型还有字符串。那么既然有了元组为什么还要列表呢,因为元组中的元素不可以改变。
1 >>> t1=('kramer',27,'male') 2 >>> id(t1) 3 182894534480 4 >>> t1[1]=28 5 Traceback (most recent call last): 6 File "<stdin>", line 1, in ? 7 TypeError: object doesn't support item assignment
当然,你可以像下面这样改变
1 >>> t1=('kramer',28,'male') 2 >>> id(t1) 3 182894608464
如果这样改,那么t1的地址就会改变。
但是,元组可以直接改变。
1 >>> l1=['kramer',27,'male'] 2 >>> id(l1) 3 182894613008 4 >>> l1[1]=28 5 >>> l1 6 ['kramer', 28, 'male'] 7 >>> id(l1) 8 182894613008
好的,这就是元组和列表的不同了,也可以说是列表存在的意义。下面详细了解一下列表。
列表的定义
和元组差不多 只不过是用中括号。
列表的方法
-取值
可以通过切片索引
-添加
list.append()
-删除
del(list[])
list.remove(list[])
-修改
list[]=
-查找
var in list
关于序列类型对象的地址
1 >>> l1 2 ['kramer', 28, 'male'] 3 >>> type(l1) 4 <type 'list'> 5 >>> 6 >>> 7 >>> 8 >>> 9 >>> 10 >>> 11 >>> id(l1) 12 182894613008 13 >>> id(l1[0]) 14 182894599984 15 >>> id(l1[1]) 16 5279056 17 >>> id(l1[2]) 18 182894598064
可见 列表类型的地址和其中各个元素的地址不相关,可见,列表虽然看起来像是c/c++中的数组,但还是不一样的。
1 >>> t1 2 ('kramer', 28, 'male') 3 >>> type(t1) 4 <type 'tuple'> 5 >>> 6 >>> 7 >>> 8 >>> 9 >>> 10 >>> id(t1[0]) 11 182894599984 12 >>> id(t1[1]) 13 5279056 14 >>> id(t1[2]) 15 182894598064
可见,元组也差不多,其地址和各个元素的地址没什么关系,另外很重要的一点是,我们发现,其中个元素的地址和上列表个元素的地址是一样的。这说明这些序列其实还是引用了相同地址空间中的东西。跟变量差不多。
1 >>> s1 2 'kramer27male' 3 >>> type(s1) 4 <type 'str'> 5 >>> 6 >>> 7 >>> 8 >>> 9 >>> 10 >>> 11 >>> id(s1[0]) 12 182894348592 13 >>> id(s1[1]) 14 182894215056 15 >>> id(s1[2]) 16 182894428208 17 >>> 182894348592-182894215056 18 133536 19 >>> 182894215056-182894428208 20 -213152
这说明了字符串也一样。而且开始我以为字符串中的各个字符存储的位置起码是连着的了吧,可是我们可以看到,也不是这样。