Python入坑笔记(二):list和tuple

Author Avatar
Zhu Yuexin Oct 27, 2017

list

Python中的list有点类似其它语言的数组,也和Java的List很像,是一种有序的集合,不同的是Python的list可以接受不同类型的数据。

初始化

list[]符号包裹起来

months = []
print(type(months))

outputs:

<class 'list'>

可以初始化一个包含多个元素的list,元素之间用,隔开。可以用len函数获取list的长度。

months = ["January", "February"]
print(months)
print("length:", len(months))

outputs:

['January', 'February']
length: 2

一个list中还可以包含另一个list,就是list相互嵌套

months = ['January', ['February', 20, 99.99], 'March']
print(months)

outputs:

['January', ['February', 20, 99.99], 'March']

添加和删除元素

append函数可以在list末尾添加一个元素;insert(i, element)函数可以把元素插入到指定位置(i是索引)

months = ["January", "February"]
print(months)
months.append("March")
print(months)
months.insert(1, 99.99)
print(months)

outputs:

['January', 'February']
['January', 'February', 'March']
['January', 99.99, 'February', 'March']

pop函数可以删除list末尾的元素,pop(i)可以删除索引位置为i的元素

months = ['January', 'February', 'March']
print(months)
month = months.pop()
print(months)
print("删除了:" + month)
month = months.pop(1)
print(months)
print("删除了:" + month)

outputs:

['January', 'February', 'March']
['January', 'February']
删除了:March
['January']
删除了:February

访问和替换元素

要访问list中的元素,可以像数组一样用下标来获取对应索引的元素,从0开始。

索引可以为负数,来获取倒数第1个、倒数第二个…元素

months = ['January', 99.99, 'February', 'March']
print(months[2])
print(months[-1])
print(months[-4])

outputs:

February
March
January

要替换list中的某个元素,只需要直接赋值给对应的索引位置

months = ['January', 99.99, 'March']
months[1] = "February"
print(months)

outputs:

['January', 'February', 'March']

对于嵌套的list,访问和替换可以用两个下标,也就是像二维数组一样

months = ['January', ['February', 20, 99.99], 'March']
print(months[1][0])
months[1][2] = "hi"
print(months)

outputs:

February
['January', ['February', 20, 'hi'], 'March']

tuple

tuple是另一种有序列表,叫做元组。tuplelist非常类似,不同的是tuple一旦初始化就不能修改。

tuple()包裹,如果要定义一个空的tuple可以写成(),如果要定义只有1个元素的tuple,必须加一个逗号,来消除歧义(括号()既可以表示tuple又可以表示数学公式中的小括号),比如(1,)

t = (1, 2)
t_none = ()
t_1 = (1,)
print(t)
print(t_none)
print(t_1)

outputs:

(1, 2)
()
(1,)

访问tuple中的元素,可以像list一样使用下标,但是没有append等可以改变它的方法,而且给tuple中的元素重新赋值也会报错。

t = (1, 2, "hi")
print(t[2])
t[0] = 2

outputs:

hi

TypeError: 'tuple' object does not support item assignment

因为tuple是不可变的,所以它相对list更加安全,在能用tuple处理的情况下,尽量不要使用list

这里也有一种办法让tuple看起来像是可变的,就是在tuple中存入一个listlist内部是可变的,可以指向任意元素,所以这里的tuple看起来像是可变的。事实上,tuple中存入list只是指向了这个list,如果让它指向其它的list就会报错,因为tuple本身还是不可变的。

li = ["Tom", 20]
t = ("hello", li)
print(t)
li[0] = "Jerry"
print("after change:", t)
li_2 = ["Jack", 18]
t[1] = li_2

outputs:

('hello', ['Tom', 20])
after change: ('hello', ['Jerry', 20])

TypeError: 'tuple' object does not support item assignment