同其它编程语言一样,python也提供了丰富的数据结构,以方便数据的处理。本文介绍两种最基本的数据集合,列表和元组的使用。

一、列表使用介绍

可以理解为一个有序的序列。其使用方式举例如下:

list=[]  #定义了一个空的列表
list.append("hello1")   #往列表的尾部插入一个元素
list.append(12)  #往列表的尾部插入一个元素,可以看出,列表中的元素可以是多种类型的
print list
for item in list:   #利用for循环遍历列表中的元素
    print item
list.insert(0,10)  #往列表中插入元素,insert方法的第一个参数是代表插入的位置,0表示第一个位置
list.insert(2,11)
print list
list.pop()   #pop方法是移除列表中的元素(默认为最后一个),并返回该元素。注意如果这时列表为空,则抛异常
print list
list.pop(0) #带参数的pop放啊是移除指定位置的元素,并返回该元素。注意,如果指定为主的元素不存在,则抛异常
print list
list.remove("hello1")   #remove方法,是删除列表中元素内容同参数的元素,如果指定内容的元素不存在,则抛异常
print list
上面的代码演示了如何利用列表的  append, insert, pop,remove 这四个方法来插入和删除列表元素,并演示了如何利用for循环遍历列表元素。

除了上面操作外,还有其它操作:

1、内建函数 len , max, min ,list,del

这前三个python的内建函数,分别用于获取列表中元素的个数,列表中元素的最大值和最小值。举例如下:

>>> list=[12,'ad',13]
>>> len(list)
3
>>> max(list)
'ad'
>>> min(list)
12

注意,如果列表中没有元素,则len方法返回0,但max和min方法会报异常。

list方法是将元组转为list,这个在下一篇针对元组的文章中介绍。

del是python中的一个内建关键字,可用于删除变量。也可以用在删除列表的元素。

比如: del  list[1]  #删除列表第2个元素

del list[:]

这是删除列表所有元素,注意list=[]达不到这个效果,因为可能list指向的列表还有别的变量指向它,它只是改变了当前这个list变量的指向,但del list[:]是删除实际列表中的所有元素

[:] 这个冒号前后可以加范围,可以删除指定范围的元素,这个具体用法可看下面的 列表分片操作的介绍,这里就不多介绍了。

2、列表的index方法

用于从列表中查找指定值匹配元素的位置,如果元素不存在,则报异常,如:

>>> list=[12,14]
>>> list.index(14)
1
>>> list.index(13)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 13 is not in list

可以看出,元素14存在列表中,所以index成功返回元素在列表中的位置。而元素13不存在,所以index方法报异常。

3、列表的count方法

该方法用于统计某个元素在列表中出现的次数。如:

>>> list=["a","b"]
>>> list.count("a")
1
>>> list.count("c")
0
>>> list.append("a")
>>> list.count("a")
2

4、检查元素是否在列表中存在

因为列表的很多方法,如 remove, index ,调用时如果指定的元素不存在,会报异常。为了避免异常,需要先检查元素是否存在,存在后再调用相应的方法。实现的方法如下:

>>> print list
['a', 'b', 'a']
>>> 'a' in list
True
>>> 'c' in list
False

5、列表的extend方法
该方法用于在列表的末尾一次性增加另一个列表中的所有所有元素。

它与 两个列表的连接(通过+号运算符)操作不同, +操作是返回新的列表,不改变原来两个列表,而extend方法是修改了列表内容,往列表中加入值了。

举例如下:

>>> list1=[1,2,3]
>>> list2=[4,5]
>>> list = list1+list2
>>> print list
[1, 2, 3, 4, 5]
>>> print list1
[1, 2, 3]
>>> print list2
[4, 5]
>>> list = list1.extend(list2)
>>> print list
None
>>> print list1
[1, 2, 3, 4, 5]
>>> print list2
[4, 5]

可以看出,extend方法不会有返回值。

6、列表的reverse方法

该方法将列表中的元素反向存放。举例如下:

>>> list=[1,2,3]
>>> result = list.reverse()
>>> print result
None
>>> print list
[3, 2, 1]

可以注意到,reverse方法不会有返回值,它改变的是列表本身。实际上列表的各种方法,除pop方法有返回值外,其它方法都没有返回值。

7、列表的复制 和分片操作

有时我们需要对列表进行复制,注意下面的方式不是复制。

list1 = [1,2,3]

list2 = list1

上面的操作,list2 和 list1 实际上是指向同一个列表,对list1或list2的任何一个进行操作,实际都是对同一个列表进行操作。

我们所说的复制,是深度复制,指创建一个新的列表(但内容一样),创建后复制的列表和原始列表是没关系的。

要想深度复制,可通过对列表的分片操作来实现,所谓分片操作,就是获取列表的一部分或全部,形成一个全新的列表,这与原列表无关。

举例如下:

>>> list=[1,2,3,4]
>>> newlist=list[1:3] #分片操作,取第2和3个元素形成新列表
>>> print newlist
[2, 3]
>>> print list
[1, 2, 3, 4]
>>> list.pop()
4
>>> newlist.pop()
3
>>> print list
[1, 2, 3]
>>> print newlist
[2]

可以看出,分片操作获得的列表是一个全新的列表,与原列表无关,两者是完全独立的,后续得各自操作也互不影响。

分别的完整语法是: list[startindex:endindex]   #其中startindex是起始位置(0代表第一个元素),endindex代表结束位置(但是不包含这个结束位置)。
下面是分片的几种特别操作

newlist  =list[:]  #复制整个列表

newlist = list[2:]  # 获取list的第三个元素及以后的元素,如果指定的序号超过列表的最大序号,则返回空的列表

newlist=list[:3]  #获取列表的前3个元素,如果指定的数目超过列表的最大元素个数,则返回整个列表内容

newlist=list[-2:]  # 获取列表的最后2位元素,如果指定数字的绝对值大于列表的元素总数,则返回整个列表内容

newlist=list[-3:-1]  # 这是相当于从列表的后面往前算,获取包括倒数第3个~倒数第2个元素

上面介绍的分片操作,获取的列表都是连续的,python的分片操作还提供可以指定步长的操作,即获取的元素不是连续的,而是按照指定的步长跳着获取元素。

举例说明:

>>> list = [1,2,3,4,5,6,7,8,9]
>>> newlist = list[1:6:2]
>>> print newlist
[2, 4, 6]
>>> newlist = list[1:6:3]
>>> print newlist
[2, 5]

相比上面的代码,[:]操作中最后多了参数,就是步长。
比如[1:6:2],如果步长为1,则[1:6]取得数据为2,3,4,5,6 ,而这里步长为2,因为第一个取得元素为2,间隔一个再取,结果就是 2,4,6了。

同理[1:6:3] , 而这里步长为2,因为第一个取得元素为2,间隔2个再取,结果就是 2,5了。

8、列表的sort方法

该方法对列表进行从低到高排序,注意它也没有返回值,修改的是列表本身。如:

>>> list=[3,8,9]
>>> newlist=list.sort()
>>> print list
[3, 8, 9]
>>> print newlist
None
>>> list.reverse()
>>> print list
[9, 8, 3]

上面的例子也利用reverse方法,最后得到一个从高低排序的列表。

9、列表的高级排序

利用sort方法,只能按照默认方式排序,通过指定排序算法(函数),可以按照自己的要求来排序。

就是给sort方法指定一个排序函数。这个使用方法不再本文介绍。

二、列表使用总结

从上面的介绍可以看出,对列表的操作(包括列表本身方法和通用的内建函数)还是挺多的,记起来也比较麻烦。

为了方面记忆,我们这里汇总描述下。总的来说,对于一个列表,不外乎创建、增删改差、其它几种操作。

1、创建

直接通过 [] 符合创建,创建时可初始化

2、增加

可以利用 append, insert, extend 这几个列表的方法。

3、删除

可以利用列表的 pop,remove方法,以及内置函数del 来删除列表中的元素。

4、改

可以利用列表下标,如 list[2] =xxx 来修改元素中的内容

5、查

查询列表中的元素可以有多种方法,如下:

1)利用for循环可以遍历列表中所有元素

2)利用 序号索引可以获取指定序号的元素(同其它语言的数组操作一样),如 list[0] 获取第1个元素,如果指定的索引越界,则会报异常

3)利用 index 方法 可以获取指定元素的位置

4)利用pop方法可以获取到指定位置的元素

5)利用分片操作可以获取列表的部分或全部,这个注意会产生列表部分或全部的一个新的拷贝

6)用 in运算符来检查某个元素值是否在列表中存在

6、其它操作

如利用sort方法排序,reverse方法列表元素顺序反转,分片操作复制列表。

利用内建函数 len,max,min 获取队列的元素个数,最大值、最小值。

利用count方法查找指定元素在队列中的出现次数。

Python 2.7 学习笔记 列表的使用的更多相关文章

  1. 《python基础教程(第二版)》学习笔记 列表/元组(第2章)

    <python基础教程(第二版)>学习笔记 列表/元组(第2章)序列中的下标从0开始x='ABC' ==> x[0]='A', x[1]='B', x[2]='C'负数索引从右边开始 ...

  2. Requests:Python HTTP Module学习笔记(一)(转)

    Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...

  3. Python Built-in Function 学习笔记

    Python Built-in Function 学习笔记 1. 匿名函数 1.1 什么是匿名函数 python允许使用lambda来创建一个匿名函数,匿名是因为他不需要以标准的方式来声明,比如def ...

  4. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  5. Python核心编程--学习笔记--6--序列(下)列表、元组

    11 列表 类似于C语言的数组,但是列表可以包含不同类型的任意对象.列表是可变类型. 创建列表——手动赋值.工厂函数: >>> aList = [12, 'abc'] >> ...

  6. python网络爬虫学习笔记(二)BeautifulSoup库

    Beautiful Soup库也称为beautiful4库.bs4库,它可用于解析HTML/XML,并将所有文件.字符串转换为'utf-8'编码.HTML/XML文档是与“标签树一一对应的.具体地说, ...

  7. python网络爬虫学习笔记(一)Request库

    一.Requests库的基本说明 引入Rquests库的代码如下 import requests 库中支持REQUEST, GET, HEAD, POST, PUT, PATCH, DELETE共7个 ...

  8. Python(Head First)学习笔记:四

    4 持久存储:文件存储.读写 数据保存到文件:在学习的过程中出现了一个问题,老是报一个错:SyntaxError: invalid syntax: 这个是语法错误,后来搜了下才知道是python2.7 ...

  9. Python基础班学习笔记

    本博客采用思维导图式笔记,所有思维导图均为本人亲手所画.因为本人也是初次学习Python语言所以有些知识点可能不太全. 基础班第一天学习笔记:链接 基础班第二天学习笔记:链接 基础班第三天学习笔记:链 ...

随机推荐

  1. (asp.net MVC学习)System.Web.Mvc.UrlHelper的学习与使用

    上一次学习了HtmlHelper帮助类,这次我们学习一下UrlHelper帮 助类,看类名也都知道这个类是用来帮我们生成URL在ASP.NET MVC应用程序中.让我们来看看该类给我们带来了哪些方便的 ...

  2. ***EF中的问题(复习的同学可略过)

    1.当类中出现两个导航属性时,需使用额外代码说明类之间的关系. [ForeignKey("Id")] [InverseProperty("Id"]

  3. 用QComboBox实现tree状结构(QComboBox居然有setView和setModel函数)

    实现的效果图如下:  #include "mainwindow.h" #include <QApplication> #include <QTreeView> ...

  4. JS实现日历控件选择后自动填充

    最近在做人事档案的项目,在做项目的初期对B/S这块不是很熟悉,感觉信心不是很强,随着和师哥同组人员的交流后发现,调试程序越来越好了,现在信心是倍增,只要自己自己踏实的去研究.理解代码慢慢的效果就出来了 ...

  5. 搜狗2015校园招聘javaproject师面经

    面试时看到了我的笔试题.真是慘不忍睹啊. . 1. 问回去有没有研究一下笔试题 木有,果断后面悲剧了 2. 解释一下笔试的一道选择题: 下列哪种操作可能带来死锁? A: lock(m1) lock(m ...

  6. python命令行参数处理

    使用argparse包来解析命令行参数: #/usr/bin/python #encoding=utf-8 import argparse parser = argparse.ArgumentPars ...

  7. map的erase()释放内存

    STL中的map调用erase(it),当value值为指针时,释放内存: #include <iostream> #include <map> #include <st ...

  8. 语句(语句分类及if语句)

    目前为止,之前学过的程序只能一句一句向下执行.C#:选择控制:if,else,switch,case循环控制:while,do,for,foreach跳转语句:break,continue异常处理:t ...

  9. 五毛的cocos2d-x学习笔记04-触摸点

    Touch position是屏幕坐标系中的点,OpenGL position是cocos2d-x用到的OpenGL坐标系上的点坐标.所以就需要将touch的坐标转换成OpenGL坐标系中的点坐标. ...

  10. java读写

    IO流下分为字节流与字符流,每个流又分为输入输出以及读写. 字节流的两个基类为InputStream与OutputStream. 字符流为Reader和Writer