列表:可以用 list 或者 [] 来表示,与元组不同,长度是可以变化的,每一项内容也可以修改。
lista = [2,3,5] #定义了一个列表
tup = ('foo', 'bar', 'baz')
listb = list(tup) #通过元组创建一个列表
print(listb)
#打印
['foo', 'bar', 'baz']
#修改列表第二项
listb[1] = 'peek'
print(listb)
#打印
['foo', 'peek', 'baz']
列表的另一个生成方式,通过迭代器或生成器转化:
g = range(10)
print(g)
#打印
range(0, 10)
list_a = list(g)
pring(list_a)
#打印
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
列表的方法有以下常用的:
append -- 添加数据
insert -- 插入数据
remove -- 移除数据
pop -- 移除并返回数据
lista = ['hello', 'world']
lista.append('day') #添加
print(lista)
#打印
['hello', 'world', 'day']
lista.insert(1, 'month') #在 1 的位置插入一个新数据
print(lista)
#打印
['hello', 'month', 'world', 'day']
lista.remove('world') #删除 ‘world’
print(lista)
#打印
['hello', 'month', 'day']
lista.append('hello') #这时里面有两个‘hello’
lista.remove('hello') #删除第一个‘hello’,留下最新加入的一个
print(lista)
#打印
['month', 'day', 'hello']
a = lista.pop(1) #移除第二个数据,并且返回
print(a, lista)
#打印
'day', ['month', 'hello']
另外一个判断一个元素是否在列表中,用到的关键字是 in 和 not in
#接着上面的代码
bln = 'year' in lista
print(bln)
#打印
False
bln = 'year' not in lista
print(bln)
#打印
True
两个列表也可以通过使用‘+’号来拼接,但是这个代价会大一些,因为要临时创建新的列表并且复制数据,我们可以使用列表的自带函数,extend,它可以直接将后面的列表添加到调用extend函数的列表中去,这会减少临时数据的生成:
alist = [1, 2, 3]
blist = [4, 5, 6]
clist = alist + blist
print(clist)
#打印
[1, 2, 3, 4, 5, 6]
alist.extend(blist)
print(alist)
#打印
[1, 2, 3, 4, 5, 6]
列表还有一个重要功能,就是排序,sort函数,它是在列表内部进行排序,不会创建新的列表:
alist = [5, 4, 7, 8, 1]
alist.sort()
print(alist)
#打印
[1, 4, 5, 7, 8]
blist = ['saw', 'samll', 'he', 'foxes', 'six']
blist.sort(key=len)
print(blist)
#打印
['he', 'saw', 'six', 'small', 'foxes']
bisect是一个模块,可以实现二分搜索和已排序列表的插值。使用bisect.bisect可以找到元素应该插入的位置,并且保持序列排序;bisect.insort可以将元素插入到相应位置:
import bisect #导入bisect模块
alist = [1, 2, 2, 2, 3, 4, 7]
print(bisect.bisect(alist, 2)) #表示 2 这个数,可以插入到列表的第五个位置
#打印
4
print(bisect.bisect(alist, 5)) #表示 5 这个数,可以插入到列表的第七个位置
#打印
6
bisect.insort(alist, 6) #将数字6插入到列表的第七个位置
print(alist)
#打印
[1, 2, 2, 2, 3, 4, 6, 7]
这里的bisect并不会检查列表是否已经排序了,如果不排序就使用这个模块,可能会导致不正确的结果,所以应该在使用排序之后,再使用这个模块可以快速的将数据插入到列表中去。
列表的另一个强大的功能就是切片,用 start:stop 对传入中括号中进行取值:
alist = [7, 2, 3, 7, 5, 6, 0, 1]
blist = alist[1: 5]
print(blist)
#打印
[2, 3, 7, 5]
alist[3:4] = [6, 3]
print(alist)
#打印
[7, 2, 3, 6, 3, 5, 6, 0, 1]
切片的数量等于stop - start,取值包含start,不包含stop,另外start和stop是可以省略的,如果省略就表示从列表的起始位置到列表的结束位置:
#接上面代码
blist = alist[:5]
print(blist)
#打印
[7, 2, 3, 6, 3]
blist = alist[3:]
print(blist)
#打印
[6, 3, 5, 6, 0, 1]
#另外索引也可以为负数,表示从列表最后开始:
blist = alist[-4:]
print(blist)
#打印
[5, 6, 0, 1]
blist = alist[-6: -2]
print(blist)
#打印
[6, 3, 5, 6]
列表还可以按照间隔取值,叫步进值 step,在start:stop之后再加一个冒号表示:start:stop:step:
#接上面代码
blist = alist[::2]
print(blist)
#打印
[7, 3, 3, 6, 1]
#有一个小技巧,我们如果想讲列表翻转,那么只要将step变为-1即可:
blist = alist[::-1]
print(blist)
#打印
[1, 0, 6, 5, 3, 6, 3, 2, 7]