2018.03.07
author:wills
下面从代码里面看列表的用法。
l= [1,2,3,4,5,6,7]
l.append(8)
l.insert(0,30)
l.insert(10,12)
l.insert(-1,11)
print(l)
append函数表示:追加;insert函数表示:插入。但是insert函数可以多带参数,表示插入位置。以上4段代码分别表示:1,在list最后添加一个元素8;2,在list第一个元素前面插入30;3,l列表的长度不够10,那么此时表示在l列表最后插入一个元素12;4,第一个参数是-1,表示插入位置从右往左边数,即在最后一个元素前面插入11。输出结果为
[30, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12]
除了这些简单操作以外,字符串的切片操作,列表也是支持的,并且用法和字符串是一样的。下面说一下列表的非一般操作。
ls = [12,23,34,45,56]
for i,val in enumerate(ls):
print('第%d个元素是%d' % (i,val))
比如在这个代码中使用了enumerate(函数),它的作用是可以在for循环遍历中取得两个参数,第一个表示列表中元素的下标,第二个表示元素本身,所以这个用法在很多时候是很有用的。
列表生成式 与列表生成器
# 列表生成式
list = [x**2 for x in range(1,10)]
列表生成式,生成一个列表list,并且列表中的每一个元素都已经存在,需要调用时可以直接使用。优点,元素已经存在,调用十分迅速;缺点,因为所有的元素都已经存在,比较占内存空间
f1 = (x ** 2 for x in range(1,10))
列表生成器,生成一个列表容器的对象,列表中的元素尚未实际产生,在调用生成器对象的时候在产生相应元素。优点,因为生成的是一个列表容器的对象,因此内存空间占用很少;缺点,列表中元素尚未实际产生,调用时再由列表生成器对象产生,耗费的时间较多。
从以上可以看出,在编程中,时间和空间的矛盾几乎是不可调和的。比如我们内存上的栈,假如栈很大:优点是单次放入的数据多,缺点是运行的速度慢;反之,栈很小,那么运行速度一定快,但是单次处理的数据量就少了。
今天闲来无事写了一个很有意思的程序就是双色球,模拟投注双色球,代码如下
from random import randint
def generate():
red_bal = [x for x in range(1,34)]
lottery = [0] * 6
for n in range(6):
index = randint(0,len(red_bal)-1)
lottery[n] = red_bal[index]
del red_bal[index]
blue = randint(1,16)
lottery.sort()
lottery.append(blue)
return lottery
def display(list):
for i,val in enumerate(list):
if i == len(list) - 1:
print(end='| ')
print('%02d' % val,end=' ')
print()
def buy_lottery(n):
for _ in range(n):
display(generate())
n = int(input('你买几注:'))
buy_lottery(n)
这个程序中定义了三个函数,第一个generate()函数,利用了列表的特性,用来生成一个7位的号码,前6个表示红球,是1-33不重复的号码,最后一个是1-16的蓝色球。display函数将个位数补上了0,使每一个数字看着都是2位数,并且在最后一位前面加了|,表示最后一位是蓝色球。最后一个buy_lottery()函数表示你要买几注彩票。下面是运行结果