今天要说一个新概念--list,中文可以翻译成列表,是用来处理一组有序项目的数据结构。想象一下你的购物清单、待办工作、手机通讯录等等,它们都可以看作是一个列表。说它是新概念也不算确切,因为我们之前已经用过它,就在这个语句里:

for i in range(1, 10):

#此处略过数行代码

看出来list在哪里了吗?你试一下:

print range(1,10)

得到的结果是:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

这就是一个list。它由range产生。把上面那个for循环语句写成:

l = range(1, 10)

for i in l:

效果是一样的。

于是可以看出,for循环做的事情其实就是遍历一个列表中的每一项,每次循环都把当前项赋值给一个变量(这里是i),直到列表结束。

我们也可以定义自己的列表,格式就是用中括号包围、逗号隔开的一组数值:

l = [1, 1, 2, 3, 5, 8, 13]

可以用print输出这个列表:

print l

同样也可以用for...in遍历这个列表,依次输出了列表中的每一项:

for i in l:

print l,

列表中的元素也可以是别的类型,比如:

l = ['meat', 'egg', 'fish', 'milk']

甚至是不同类型的混合:

l = [365, 'everyday', 0.618, True]

l身为一个列表,有一些特有的功能,这个我们下回再说。

 操作list

上周给list开了个头,知道了什么是list。假设我们现在有一个list:

l = [365, 'everyday', 0.618, True]

除了用for...in遍历l中的元素,我们还能做点啥?

1. 访问list中的元素

list中的每个元素都对应一个递增的序号。与现实中习惯的序号不同在于,计算机中的计数通常都是从0开始,python也不例外。如果你记不清这个而导致了错误,请去听一下孙燕姿的《爱从零开始》。

要访问l中的第1个元素365,只要用l[0]就可以了。依次类推,

print l[1]

就会输出'everyday'

注意,你不能访问一个不存在的元素,比如l[10],程序就会报错,提示你index越界了。

2. 修改list中的元素

修改list中的某一个元素,只需要直接给那个元素赋值就可以了:

l[0] = 123

输出l,得到[123, 'everyday', 0.618, True],第1个元素已经从365被改成了123。

3. 向list中添加元素

list有一个append方法,可以增加元素。以l这个列表为例,调用的方法是:

l.append(1024)

输出l,你会看到[123, 'everyday', 0.618, True, 1024],1024被添加到了l,成为最后一个元素。(第一个元素在上一步被改成了123)

然后同样可以用l[4]得到1024。

4. 删除list中的元素

删除list中的某一个元素,要用到del:

del l[0]

输出l,得到['everyday', 0.618, True, 1024]。这时候再调用l[0],会得到'everyday',其他元素的序号也相应提前。

以上这些命令,你可以直接在python shell中尝试。

#==== 点球小游戏 ====#

我打算从今天开始,每天说一点这个小游戏的做法。方法有很多种,我只是提供一种参考。你可以按照自己喜欢的方式去做,那样她才是属于你的游戏。

先说一下方向的设定。我的想法比较简单,就是左中右三个方向,用字符串来表示。射门或者扑救的时候,直接输入方向。所以这里我准备用raw_input。有同学是用1-8的数字来表示八个方向,每次输入一个数字,这也是可以的。不过这样守门员要扑住的概率可就小多了。

至于电脑随机挑选方向,如果你是用数字表示,就用我们之前讲过的randint来随机就行。不过我这次打算用random的另一个方法:choice。它的作用是从一个list中随机挑选一个元素。

于是,罚球的过程可以这样写:

from random import choice

print 'Choose one side to shoot:'

print 'left, center, right'

you = raw_input()

print 'You kicked ' + you

direction = ['left', 'center', 'right']

com = choice(direction)

print 'Computer saved ' + com

if you != com:

print 'Goal!'

else:

print 'Oops...'

反之亦然,不赘述。

list有两类常用操作:索引(index)和切片(slice)。

昨天我们说的用[]加序号访问的方法就是索引操作。

除了指定位置进行索引外,list还可以处理负数的索引。继续用昨天的例子:

l = [365, 'everyday', 0.618, True]

l[-1]表示l中的最后一个元素。

l[-3]表示倒数第3个元素。

切片操作符是在[]内提供一对可选数字,用:分割。冒号前的数表示切片的开始位置,冒号后的数字表示切片到哪里结束。同样,计数从0开始。

注意,开始位置包含在切片中,而结束位置不包括。

l[1:3]

得到的结果是['everyday', 0.618]。

如果不指定第一个数,切片就从列表第一个元素开始。

如果不指定第二个数,就一直到最后一个元素结束。

都不指定,则返回整个列表的一个拷贝。

l[:3]

l[1:]

l[:]

同索引一样,切片中的数字也可以使用负数。比如:

l[1:-1]

得到['everyday', 0.618]

#==== 点球小游戏 ====#

昨天有了一次罚球的过程,今天我就让它循环5次,并且记录下得分。先不判断胜负。

用score_you表示你的得分,score_com表示电脑得分。开始都为0,每进一球就加1。

from random import choice

score_you = 0

score_com = 0

direction = ['left', 'center', 'right']

for i in range(5):

print '==== Round %d - You Kick! ====' % (i+1)

print 'Choose one side to shoot:'

print 'left, center, right'

you = raw_input()

print 'You kicked ' + you

com = choice(direction)

print 'Computer saved ' + com

if you != com:

print 'Goal!'

score_you += 1

else:

print 'Oops...'

print 'Score: %d(you) - %d(com)\n' % (score_you, score_com)

print '==== Round %d - You Save! ====' % (i+1)

print 'Choose one side to save:'

print 'left, center, right'

you = raw_input()

print 'You saved ' + you

com = choice(direction)

print 'Computer kicked ' + com

if you == com:

print 'Saved!'

else:

print 'Oops...'

score_com += 1

print 'Score: %d(you) - %d(com)\n' % (score_you, score_com)

注意:手机上代码有可能会被换行。

这段代码里有两段相似度很高,想想是不是可以有办法可以用个函数把它们分离出来。

Python初探list的更多相关文章

  1. 01 Python初探

    Python初探 Become a better version of yourself! 诞生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年开始写Python ...

  2. Python初探

    Q:DBA是运维数据库,为什么还要懂开发? A: 维护:维护的机器太多了,很多重复的操作,需要开发出工具来实现 监控:所有机器的运行情况和健康状况都需要了解,全盘掌握cup.内存.磁盘.网络流量.数据 ...

  3. python初探爬虫

    python爬虫初探 爬取前50名豆瓣电影: 废话少说,直接上代码! import re​import requestsfrom bs4 import BeautifulSoup​def get_co ...

  4. Python初探-购物车程序

    要求: 1,用户进入后,有欢迎语并提示用户输入本金 2.用户输入正确的内容后有购物菜单显示给用户 3.当用户的本金不足以购买商品的时候有提示余额不足并告知差额 4.成功购物后提示已购买内容和购买后的余 ...

  5. [python]初探socket

    1.什么是socket? Socket中文译作:套接字,但是大家一般约定俗称的都用:socket.我想在解释socket是什么之前,先说它是用来干嘛的:socket是来建立'通信'的基础,建立连接,传 ...

  6. python初探-数据类型

    数据类型 可以使用BIF type()来查看对象的类型 数字 int float long 布尔(bool) True 机内表示1,机器识别非0 False 机内表示0,机器识别0 空值 None 字 ...

  7. python初探-copy

    python中,数据的拷贝有以下三种形式:赋值.浅copy和深copy.根据类型的不同,可以把数据分成以下两类:字符串和数字为一类,其他(包括列表.元祖.字典...)为一类. 在python中有池的概 ...

  8. python初探-collections容器数据类型

    collections容器数据类型是对基本数据类型的补充,简单介绍下计数器.有序字典.默认字典.可命名元祖.队列. 计数器(Counter) Counter是对字典类型的补充,用于追踪值得出现次数 c ...

  9. Pandas基础学习与Spark Python初探

    摘要:pandas是一个强大的Python数据分析工具包,pandas的两个主要数据结构Series(一维)和DataFrame(二维)处理了金融,统计,社会中的绝大多数典型用例科学,以及许多工程领域 ...

随机推荐

  1. MySQL绿色版安装整套流程

    https://www.cnblogs.com/LiuChunfu/p/6426918.html

  2. QR二维码原理(一)

    一.什么是QR码 QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JIS和ISO将其标准化.QR码的样子其实在很多场合已经能够被看到了,我这还是贴个图展示一下: 这个图如果被正 ...

  3. 20165325 预备作业3 Linux安装及学习

    Linux安装及学习 一.VirtualBox和Ubuntu安装 问题一:虚拟机中Ubuntu的版本 在设置虚拟机的操作系统的版本时,我发现我的电脑只能设置32-bit的Ubuntu版本.教程上选用了 ...

  4. 【python 网络爬虫】之scrapy系列

    网络爬虫之scripy系列 [scrapy网络爬虫]之0 爬虫与反扒 [scrapy网络爬虫]之一 scrapy框架简介和基础应用 [scrapy网络爬虫]之二 持久化操作 [scrapy网络爬虫]之 ...

  5. JavaScript-简介、ECMAScript5.0

    Javascript简介 web前端有三层: HTML:从语义的角度,描述页面的结构 CSS:从审美的角度,描述样式(美化页面) Javascript:从交互的角度,描述行为(提升用户体验) Java ...

  6. 纪念一下我对Kalman的无限崇拜之情

    今天用Kalman来求线性预测模型的系数,和LMS一对比,天啦噜,我感叹了半小时... 和LMS需要选合适的步长,样本序列需要足够长,迭代次数需要足够多,相比,卡尔曼真是帅呆了!不需要步长!不需要蒙特 ...

  7. oracle 12514文件解决

    listener.ora的SID_LIST_LISTENER添加一下内容 (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = f:\app\Admini ...

  8. java的小数比较反例

    double num = 0.3; System.out.println(num); System.out.println(num - 0.2); System.out.println(num - 0 ...

  9. 转-C语言中.h和.c文件解析

    C语言中.h和.c文件解析(很精彩)   简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:       1.预处理阶段 2.词 ...

  10. HBase在HDFS上的目录介绍

    总所周知,HBase 是天生就是架设在 HDFS 上,在这个分布式文件系统中,HBase 是怎么去构建自己的目录树的呢? 第一,介绍系统级别的目录树. 一.0.94-cdh4.2.1版本 系统级别的一 ...