(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

这说明了字符串也一样。而且开始我以为字符串中的各个字符存储的位置起码是连着的了吧,可是我们可以看到,也不是这样。

原文地址:https://www.cnblogs.com/kramer/p/2956129.html