1、list

列表是Python内置的一种数据,list是一种有序的集合,可随时添加或者删除其中的元素。

举例:

列出一个班级所有同学的姓名,便可以使用一个列表表示:

>>> classmates = ['zhangsan','lisi','wanger']

>>> classmates

['zhangsan','lisi','wanger']

此时的变量classmates便是一个list,用len()函数可以获取list元素的个数

>>>len(classmates)

3

通过索引来访问list中每一个位置的元素,索引是从0开始的

>>> classmates[0]
'zhangsan'
>>> classmates[1]
'lisi'
>>> classmates[2]
'wanger'
>>> 

当索引超出范围时,python报出IndexError的错误,因此要确保索引不要越界,记住最后一个元素的索引是len(classmates) -1.

如果要取得最后一个元素,除了计算索引位置外,还可以用-1直接取得最后一个元素

>>> classmates[-1]
'wanger'

以此类推:

>>> classmates[-1]
'wanger'
>>> classmates[-2]
'lisi'
>>> classmates[-3]
'zhangsan'
>>> classmates[-4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>>  #第四个越界咯,此乃报错信息。

追加元素的末尾:

list是一个可变的有序表,因此可以往list中追加元素的末尾

>>> classmates.append('mazi')
>>> classmates
['zhangsan', 'lisi', 'wanger', 'mazi']
>>> 

也可以把元素插入到指定的位置,比如索引号为1的位置:

>>> classmates.insert(1,'ergouzi')
>>> classmates
['zhangsan', 'ergouzi', 'lisi', 'wanger', 'mazi']
>>> 

要删除列表末尾的元素,用pop()方法:

>>> classmates
['zhangsan', 'ergouzi', 'lisi', 'wanger', 'mazi']
>>> classmates.pop()
'mazi'
>>> classmates
['zhangsan', 'ergouzi', 'lisi', 'wanger']
>>>  #列表中最后一个的麻子被删除了。

删除指定位置的元素,用pop(i)方法,i是指索引位置:

>>> classmates
['zhangsan', 'ergouzi', 'lisi', 'wanger']
>>> classmates.pop(2)
'lisi'
>>> classmates
['zhangsan', 'ergouzi', 'wanger']
>>>   #指定位置的lisi被删除。

若要替换元素,直接给对应的索引位置赋值即可:

>>> classmates
['zhangsan', 'ergouzi', 'wanger']
>>> classmates[2] = "goudan"
>>> classmates
['zhangsan', 'ergouzi', 'goudan']
>>> 

list内的元素的数据类型可以是不同的,例如:

>>> B = ['book',234,True]
>>> B
['book', 234, True]
>>> 

list中的元素可以是另一个list,例如:

>>> C = ['java','perl',['php','C'],'python']
>>> len(C)
4

>>>

C中只有4个元素,其中C(2)还是一个list,分解开更容易理解:

>>> d = ['php','C']
>>> C = ['java','perl',d,'python']
>>> 

要拿到php可以写d[1]或者C[2][1],可以看成一个二维数组,类似还有三维和四维数组

如果list中一个元素也没有,则是一个空list,它的长度为0


元组(tuple)

另一种有序列表就是元组了。元组和列表类似,但是元组一旦初始化便不可再次修改,例如同样列出一个班级同学们的名字:

>>> classmates = ('zhangsan','lisi','wanger')
>>> 

现在classmates这个元组是不能变了,它没有append(),insert()这样的方法,但获取元素的方法和列表是一样的,可以正常的使用classmates[0],classmates[-1],但不能赋值成另外的元素。

因元组不可变,因此代码更安全,如果可能,尽量使用tuple代替list。

注意:当定义一个tuple时,tuple元素必须被确定下来:

>>> n = (1,2)
>>> n
(1, 2)
>>> 

定义一个空tuple,可以写成():

>>>n = ()

只定义一个元素的tuple,要写成:

>>>n = (1,)

>>>n

1,

>>>   #为什么要加一个逗号呢?因为定义的不是元组,二十1这个数!括号()这个东西,既可以表示元组,又可以表示数学公式的小括号,这便产生了歧义,因此在python中规定,这样的情况按小括号进行计算,结果自然为1,所以,只有一个元素的元组定义时必须加上逗号,来消除歧义。python在显示一个元素的时候,也会自动加上一个逗号,避免你误会成数学计算意义上的括号。

“可变的”元组:

>>> p = ('a','b',['A','B'])

>>> p[2][0] = 'x'
>>> p[2][1] = 'y'
>>> p
('a', 'b', ['x', 'y'])
>>> 

以上元组定义了三个元素,有‘a’,'b'和一个列表。那它是怎么变的呢?下面上图:

python 元祖加参数 python元祖和列表_元组

当修改列表中的元素后,元组变成了:

python 元祖加参数 python元祖和列表_python 元祖加参数_02

表面上元组的元素是变了,其实变的是列表的元素。