前面的学习中,我们已经知道了两种python的数据类型:int和str。再强调一下对数据类型的理解,这个世界是由数据组成的,数据可能是数字(注意,别搞混了,数字和数据是有区别的),也可能是文字、或者是声音、视频等。在python中(其它高级语言也类似)把状如2,3这样的数字划分为一个类型,把状如“你好”这样的文字划分一个类型,前者是int类型,后者是str类型(这里就不说翻译的名字了,请看官熟悉用英文的名称,对日后编程大有好处,什么好处呢?谁用谁知道!)。
前面还学习了变量,如果某个变量跟一个int类型的数据用线连着(行话是:赋值),那么这个变量我们就把它叫做int类型的变量;有时候还没赋值呢,是准备让这个变量接收int类型的数据,我们也需要将它声明为int类型的变量。不过,在python里面有一样好处,变量不用提前声明,随用随命名。
这一讲中的list类型,也是python的一种数据类型。翻译为:列表。下面的黑字,请看官注意了:
**LIST在python中具有非常强大的功能。**
## 定义
在python中,用方括号表示一个list,[ ]
在方括号里面,可以是int,也可以是str类型的数据,甚至也能够是True/False这种布尔值。看下面的例子,特别注意阅读注释。
~~~
>>> a=[] #定义了一个变量a,它是list类型,并且是空的。
>>> type(a)
<type 'list'> #用内置函数type()查看变量a的类型,为list
>>> bool(a) #用内置函数bool()看看list类型的变量a的布尔值,因为是空的,所以为False
False
>>> print a #打印list类型的变量a
[]
~~~
不能总玩空的,来点实的吧。
~~~
>>> a=['2',3,'qiwsir.github.io']
>>> a
['2', 3, 'qiwsir.github.io']
>>> type(a)
<type 'list'>
>>> bool(a)
True
>>> print a
['2', 3, 'qiwsir.github.io']
~~~
用上述方法,定义一个list类型的变量和数据。
本讲的标题是“有容乃大的list”,就指明了list的一大特点:可以无限大,就是说list里面所能容纳的元素数量无限,当然这是在硬件设备理想的情况下。
## list索引
尚记得在[《玩转字符串(3)》](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/109.md)中,曾经给字符串进行编号,然后根据编号来获取某个或者某部分字符,这样的过程,就是“索引”(index)。
~~~
>>> url = "qiwsir.github.io"
>>> url[2]
'w'
>>> url[:4]
'qiws'
>>> url[3:9]
'sir.gi'
~~~
在list中,也有类似的操作。只不过是以元素为单位,不是以字符为单位进行索引了。看例子就明白了。
~~~
>>> a
['2', 3, 'qiwsir.github.io']
>>> a[0] #索引序号也是从0开始
'2'
>>> a[1]
3
>>> [2]
[2]
>>> a[:2] #跟str中的类似,切片的范围是:包含开始位置,到结束位置之前
['2', 3] #不包含结束位置
>>> a[1:]
[3, 'qiwsir.github.io']
>>> a[-1] #负数编号从右边开始
'qiwsir.github.io'
>>> a[-2]
3
>>> a[:]
['2', 3, 'qiwsir.github.io']
~~~
## 对list反转
这个功能作为一个独立的项目提出来,是因为在编程中常常会用到。通过举例来说明反转的方法:
~~~
>>> alst = [1,2,3,4,5,6]
>>> alst[::-1] #反转
[6, 5, 4, 3, 2, 1]
~~~
这是一种非常简单的方法,虽然我在写程序的时候常常使用,但是,我不是十分推荐,因为有时候让人感觉迷茫。python还有另外一种方法,是比较容易理解和阅读的,特别推荐之:
~~~
>>> list(reversed(alst))
[6, 5, 4, 3, 2, 1]
~~~
比较简单,而且很容易看懂。不是吗?
顺便给出reversed函数的详细说明:
~~~
>>> help(reversed)
Help on class reversed in module __builtin__:
class reversed(object)
| reversed(sequence) -> reverse iterator over values of the sequence
|
| Return a reverse iterator
~~~
它返回一个可以迭代的对象,不过是已经将原来的序列对象反转了。比如:
~~~
>>> list(reversed("abcd"))
['d', 'c', 'b', 'a']
~~~
很好,很强大,特别推荐使用。
## 对list的操作
任何一个行业都有自己的行话,如同古代的强盗,把撤退称之为“扯乎”一样,纵然是一个含义,但是强盗们愿意用他们自己的行业用语,俗称“黑话”。各行各业都如此。这样做的目的我理解有两个,一个是某种保密;另外一个是行外人士显示本行业的门槛,让别人感觉这个行业很高深,从业者有一定水平。
不管怎么,在python和很多高级语言中,都给本来数学角度就是函数的东西,又在不同情况下有不同的称呼,如方法、类等。当然,这种称呼,其实也是为了区分函数的不同功能。
前面在对str进行操作的时候,有一些内置函数,比如s.strip(),这是去掉左右空格的内置函数,也是str的方法。按照一贯制的对称法则,对list也会有一些操作方法。
### 追加元素
~~~
>>> a = ["good","python","I"]
>>> a
['good', 'python', 'I']
>>> a.append("like") #向list中添加str类型"like"
>>> a
['good', 'python', 'I', 'like']
>>> a.append(100) #向list中添加int类型100
>>> a
['good', 'python', 'I', 'like', 100]
~~~
[官方文档](https://docs.python.org/2/tutorial/datastructures.html)这样描述list.append()方法
> list.append(x)
>
> Add an item to the end of the list; equivalent to a[len(a):] = [x].
从以上描述中,以及本部分的标题“追加元素”,是不是能够理解list.append(x)的含义呢?即将新的元素x追加到list的尾部。
列位看官,如果您注意看上面官方文档中的那句话,应该注意到,还有后面半句: equivalent to a[len(a):] = [x],意思是说list.append(x)等效于:a[len(a):]=[x]。这也相当于告诉我们了另外一种追加元素的方法,并且两种方法等效。
~~~
>>> a
['good', 'python', 'I', 'like', 100]
>>> a[len(a):]=[3] #len(a),即得到list的长度,这个长度是指list中的元素个数。
>>> a
['good', 'python', 'I', 'like', 100, 3]
>>> len(a)
6
>>> a[6:]=['xxoo']
>>> a
['good', 'python', 'I', 'like', 100, 3, 'xxoo']
~~~
顺便说一下len(),这个是用来获取list,str等类型的数据长度的。在字符串讲解的时候也提到了。
~~~
>>> name = 'yeashape'
>>> len(name) #str的长度,是字符的个数
8
>>> a=[1,2,'a','b'] #list的长度,是元素的个数
>>> len(a)
4
>>> b=['yeashape']
>>> len(b)
1
~~~
下一讲继续list,有容乃大。
- 第零部分 独上高楼,望尽天涯路
- 唠叨一些关于Python的事情
- 为什么要开设本栏目
- 第一部分 积小流,至江海
- Python环境安装
- 集成开发环境(IDE)
- 数的类型和四则运算
- 啰嗦的除法
- 开始真正编程
- 初识永远强大的函数
- 玩转字符串(1):基本概念、字符转义、字符串连接、变量与字符串关系
- 玩转字符串(2)
- 玩转字符串(3)
- 眼花缭乱的运算符
- 从if开始语句的征程
- 一个免费的实验室
- 有容乃大的list(1)
- 有容乃大的list(2)
- 有容乃大的list(3)
- 有容乃大的list(4)
- list和str比较
- 画圈还不简单吗
- 再深点,更懂list
- 字典,你还记得吗?
- 字典的操作方法
- 有点简约的元组
- 一二三,集合了
- 集合的关系
- Python数据类型总结
- 深入变量和引用对象
- 赋值,简单也不简单
- 坑爹的字符编码
- 做一个小游戏
- 不要红头文件(1): open, write, close
- 不要红头文件(2): os.stat, closed, mode, read, readlines, readline
- 第二部分 穷千里目,上一层楼
- 正规地说一句话
- print能干的事情
- 从格式化表达式到方法
- 复习if语句
- 用while来循环
- 难以想象的for
- 关于循环的小伎俩
- 让人欢喜让人忧的迭代
- 大话题小函数(1)
- 大话题小函数(2)
- python文档
- 重回函数
- 变量和参数
- 总结参数的传递
- 传说中的函数条规
- 关于类的基本认识
- 编写类之一创建实例
- 编写类之二方法
- 编写类之三子类
- 编写类之四再论继承
- 命名空间
- 类的细节
- Import 模块
- 模块的加载
- 私有和专有
- 折腾一下目录: os.path.<attribute>
- 第三部分 昨夜西风,亭台谁登
- 网站的结构:网站组成、MySQL数据库的安装和配置、MySQL的运行
- 通过Python连接数据库:安装python-MySQLdb,连接MySQL
- 用Pyton操作数据库(1):建立连接和游标,并insert and commit
- 用Python操作数据库(2)
- 用Python操作数据库(3)
- python开发框架:框架介绍、Tornado安装
- Hello,第一个网页分析:tornado网站的基本结构剖析:improt模块、RequestHandler, HTTPServer, Application, IOLoop
- 实例分析get和post:get()通过URL得到数据和post()通过get_argument()获取数据
- 问候世界:利用GAE建立tornado框架网站
- 使用表单和模板:tornado模板self.render和模板变量传递
- 模板中的语法:tornado模板中的for,if,set等语法
- 静态文件以及一个项目框架
- 模板转义
- 第四部分 暮然回首,灯火阑珊处
- requests库
- 比较json/dictionary的库
- defaultdict 模块和 namedtuple 模块
- 第五部分 Python备忘录
- 基本的(字面量)值
- 运算符
- 常用的内建函数
- 扩展阅读(来自网络文章)
- 人生苦短,我用Python