python中的列表操作

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()函数表示你要买几注彩票。下面是运行结果

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值