第2章  列表和元组

2.1 序列概论

python有六种内建的序列,本章讨论最常用的两种类型:列表和元组。其他的内建序列有字符串、Unicode字符串、buffer对象和xragne对象。

列表和元组的主要区别是:列表可以修改,元组不能修改。

1)列表
list1 = ['Google', 'Runoob', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];
2)元组
tup1 = ('Google', 'Runoob', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d";
>>> edward=['fsdfsd','fsdfs']
>>> edward
['fsdfsd', 'fsdfs']
>>> john=['gfdg',45]
>>> john
['gfdg', 45]
>>> database=[edward, john]
>>> database
[['fsdfsd', 'fsdfs'], ['gfdg', 45]]

注意:序列(比如列表和元组)映射(例如字典)是两类主要容器。序列中每个元素都有自己的编号,而映射中每个元素都有一个名字。而集合既不是序列也不是映射。

2.2 通用序列操作

2.2.1 索引

>>> greetin = 'hello'
>>> greetin[0]
'h'

可以使用负数进行索引,最后一个元素的位置是-1

>>> test='hello'
>>> test[-1]
'o'
>>>

字符串字面值可以直接使用索引:

>>> 'hello'[1]
'e'

如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作,

>>> test = input()[3]
abcdeft
>>> test
'd'

>>> endings = ['st','nd','rd'] +17*['th']\
+ ['st','nd','rd'] + 7*['th']\
+ ['st']
>>> endings
['st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'st']

2.2.2 分片

>>> tag='<a href = "http://www.python.org">Python web site</a>'
>>> tag[9:30]         //  从位置9到位置30(注意:9在分片内,30不在内)
' "http://www.python.o'

>>> tag[9:-4]         //  从位置9到位置-4(注意:9在分片内,-4不在分片内)

' "http://www.python.org">Python web site'

>>> numbers=[1,2,3,4,5,6,7,8,9,10]
>>> numbers[0:1]
[1]
>>> numbers[7:10]  // 10不存在,它前面一个元素包含在分片中
[8, 9, 10]
>>>

>>> numbers[-3:]   // 从-3开始的所有元素
[8, 9, 10]

>>> numbers[:3]    // 从开始到3的元素
[1, 2, 3]

>>> numbers[:]     // 整个序列
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

如何设置步长:

>>> numbers[0:10:2]     //从0到10,步长是2的方式访问元组
[1, 3, 5, 7, 9]

步长不能是0,但是可以是负数:

>>> numbers[10:0:-1]    // 如果步长是负数,需要序列的开头大于序列的结尾;如果步长是正数,需要开头小于结尾
[10, 9, 8, 7, 6, 5, 4, 3, 2]

2.2.3 序列相加

>>> [1,2,3] + [4,5,6]    // 序列可以相加
[1, 2, 3, 4, 5, 6]

>>> "hellow" +"world" // 字符串可以相加
'hellowworld'

>>> [1,2,3] + "world!"    // 不同类型不可以相加
Traceback (most recent call last):
File "<pyshell#59>", line 1, in <module>
[1,2,3] + "world!"
TypeError: can only concatenate list (not "str") to list

2.2.4 乘法

>>> 'python' *5                           //  序列乘法,序列被重复N次
'pythonpythonpythonpythonpython'

None: python内建值,确切含义是“这里什么都没有”。所以,如果想初始化一个长度为10的列表,可以按照下面的列子来实现:

>>> seq = [None]*10
>>> seq
[None, None, None, None, None, None, None, None, None, None]
>>>

2.2.5 成员资格

in: 检查一个值是否在序列中

>>> permission = 'rw'

>>> 'r' in permission
True

>>> users = ['mlh','foo','bar']
>>> input() in users
mlh
True
>>>

>>> subject = '&&&&&fdfsfsdfsdfsdf&'
>>> "&&&" in subject
True

2.2.6 长度、最小值和最大值

len:包含元素的数量

min: 最大值

max:最小值

>>> numbers=[100,34,678]
>>> len(numbers)
3
>>> max(numbers)
678
>>> min(numbers)
34

2.3 列表:Python的“苦力”

2.3.1 list函数

因为字符串不能像列表一样被修改,所以有时根据字符串创建列表会很有用。list函数可以实现:

>>> var = list("hello")
>>> var
['h', 'e', 'l', 'l', 'o']

2.3.2 基本的列表操作

(1)改变列表:元素赋值

>>> x=[1,2,3]
>>> x[1] = 8
>>> x
[1, 8, 3]

(2)删除元素:

>>> x
[1, 8, 3]
>>> del x[1]
>>> x
[1, 3]

>>> names = ['a','b','c']
>>> del names[1]
>>> names
['a', 'c']

(3)分片赋值:

>>> name=list("perl")
>>> name
['p', 'e', 'r', 'l']
>>> name[2:] = "hhhh"
>>> name
['p', 'e', 'h', 'h', 'h', 'h']

也可以通过分片来删除元素:

>>> numbers
[100, 34, 678]
>>> numbers[1:2] = []
>>> numbers
[100, 678]

2.3.3 列表方法

(1) append: 在列表末尾追加新的对象

>>> list = [1,2,3]
>>> list.append(4)
>>> list
[1, 2, 3, 4]

注意:append并不是返回新列表,而是直接在原来列表的合适的位置修改。

(2) count: 统计某个元素在列表中出现的次数

>>> x = [[1,2],1,1,[2,1,[1,2]]]
>>> x.count(1)
2
>>> x.count([1,2])
1

(3) extend:在列表的末尾一次性追加另一个序列中的多个值

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]

注意:这个操作看起来和连接操作很像,主要区别是:extend方法修改了被扩展的序列;而连接操作返回一个全新的列表。

也可以用分片的方式来实现extend的功能:

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a[len(a):] = b
>>> a
[1, 2, 3, 4, 5, 6]

(4) index: 从列表中找出某个值第一个匹配项的索引位置

>>> knights = ['we','are','the']
>>> knights.index('we')
0

(5) insert: 将对象插入到列表中

>>> numbers = [1,2,3,5,6,7]
>>> numbers.insert(3,"fd")
>>> numbers
[1, 2, 3, 'fd', 5, 6, 7]           // 注意:列表中元素的类型可以有多种

insert方法也可以用赋值来实现:

>>> numbers = [1,2,3,5,6,7]
>>> numbers[3:4] = ["fsdfsdf"]
>>> numbers
[1, 2, 3, 'fsdfsdf', 6, 7]

(6) pop

pop方法会移除列表中的一个元素,并且返回该元素的值

>>> x = [1,2,3]
>>> x.pop()      // POP 是唯一一个可以既能修改列表又返回元素值的列表方法。
3
>>> x

(7) remove: 移除列表中某个值的第一个匹配项

>>> x = ['to','be','or','not','to','be']
>>> x.remove('to')
>>> x
['be', 'or', 'not', 'to', 'be']

(8) reverse:将列表中的元素反向存放

>>> x = [1,2,3]
>>> x.reverse()    // 改变了列表但不返回值
>>> x

(9) sort: 

>>> x = [1,4,2,6,3]
>>> x.sort()          // 在原位置排序,改变序列的值
>>> x
[1, 2, 3, 4, 6]

如果获得一个列表的排序副本,而不改变原来列表的内容呢?

第一种方法:

>>> x = [5,2,6,7]
>>> y = x[:]          // 注意:这里不能用y = x, 如果那样的话,y和x指向同样的内容。
>>> y.sort()
>>> y
[2, 5, 6, 7]
>>> x
[5, 2, 6, 7]

另外一种方法:

>>> x = [5,1,7,4]
>>> y = sorted(x)
>>> x
[5, 1, 7, 4]
>>> y
[1, 4, 5, 7]

(10) 高级排序: 按照自定义的比较函数进行排序

sort方法有另外两个可选的参数:key和reverse.如果要使用它们,就通过名字来指定。

x.sort(key = len)   // 传len作为键函数,根据元素长度进行排序。

x.sort(reverse=True)   //  是否进行反向排序

2.4 元组:不可变序列

元组与列表一样,也是一种序列,唯一的不同是元组不能修改。

>>> 1,2,3          // 用逗号分隔了一些值,就是元组。
(1, 2, 3)

>>> x= 1,2,3
>>> x
(1, 2, 3)

>>> 42
42
>>> 43,                // 只有一个值的元组,一定要有逗号,
(43,)

>>> x = (42)              // 逗号很重要,只添加圆括号是没有用的
>>> x
42
>>> x = (43,) 
>>> x
(43,)

>>> 3*(40+2)
126
>>> 3*(40+2,)
(42, 42, 42)

2.4.1 tuple函数:把一个序列转成元组

>>> tuple([1,2,3])
(1, 2, 3)
>>> tuple('aab')
('a', 'a', 'b')
>>> tuple((1,2,3))
(1, 2, 3)

2.4.2 基本元组操作:

>>> x = 1,2,3
>>> x[0]
1
>>> x[0:2]
(1, 2)

2.4.3 元组的意义何在?

有两个重要原因,元组是不可以替代的:

(1) 元组可以在映射(和集合的成员)中当做键使用,而列表则不行

(2)元组作为很多内建函数和方法的返回值存在。

2.5 小结

序列:典型的序列包括列表,字符串和元组。列表是可变的,而元组和字符串是不可变的。分片可以访问序列的一部分

成员资格: in

python学习(二) 列表和元组的更多相关文章

  1. python 数据类型二 (列表和元组)

    一.列表 1.1 列表的介绍 列表是python的基本数据类型之一,其他编程语言也有类似的数据类型,比如JS中的数组,java中的数组等等,它是以[]括起来,每个元素用逗号隔开,而且可以存放各种数据类 ...

  2. Python学习3——列表和元组

    一.通用序列操作——索引.切片.相加.相乘.成员资格检查 1.索引,正序从0开始为第一个元素,逆序从-1开始,-1为最后一个元素 >>> greeting[0] 'h' >&g ...

  3. Python学习_03_列表、元组、字符串

    列表.元组.字符串这些通过顺序访问的对象统称为序列. 序列的标准操作符 对于一般的序列对象,包括列表.元组.字符串,都具有以下的标准操作: 1. element [not] in seq判断一个元素是 ...

  4. Python学习:列表、元组、字典、集合

    转载:https://www.cnblogs.com/xc-718/p/9632942.html 列表/元组 列表和元组都是序列结构,它们本身很相似,但又有一点不同: 列表是用方括号标记,如:a=[1 ...

  5. python学习之列表和元组

    配置环境:python 3.6 python编辑器:pycharm,代码如下: #!/usr/bin/python # -*- coding: UTF-8 -*- # list:是一种有序的集合,可以 ...

  6. Python学习笔记----列表、元组和字典的基础操作

    文章目录 一.列表的基本操作 1.1 修改列表中的某个数据 1.2 获取某个元素的返回值(返回的是索引) 1.3 在列表中插入新的元素 1.4 删除列表中的元素 1.5 +和* 二.内置的函数和方法 ...

  7. Python 学习笔记(1)Python容器:列表、元组、字典与集合

    Python容器:列表.元组.字典与集合 列表: 1.列表 的创建 使用[ ] 或者 list()创建列表:empty_list = [ ] 或者 empty_list= list() 使用list( ...

  8. python第二天 列表、元组

    今天学习了列表.元组相关的知识:与C中的数组列表相似,元组为只读列表: 以及切片相关操作: #!usr/bin/env python #-*-coding:utf-8-*- # Author calm ...

  9. Python学习2-列表和元组

    Python学习2-列表和元组 标签(空格分隔): 列表 元组 在Python中,最基本的数据结构是序列(sequence).序列中的每个元素被分配一个序号--即元素的位置,也称为索引.索引从0开始. ...

  10. Python学习02 列表 List

    Python学习02 列表 List Python列表 List Python中的列表(List)用逗号分隔,方括号包围(comma-separated values (items) between ...

随机推荐

  1. vue2 遇到的问题汇集ing

    1 .子路由 { path: '/order-list', //订单列表 name: "order-list", component(resolve) { require.ensu ...

  2. IFE 2015_spring task0002 自学记录

    JavaScript数据类型及语言基础 1. 判断arr是不是一个数组,返回一个bool值. 首先javascript有5大基本数据类型:Undefined,Null,Boolean,Number和S ...

  3. RadioButton实现多选一

    RadioButton实现多选一 一.简介 二.RadioButton实现多选一方法 1.将多个RadioButton放在一个RadioGroup里面 <RadioGroup android:i ...

  4. spring mvc:文本框

    采用:<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> ...

  5. python脚本3_输入若干个整数打印出最大值

    #输入若干个整数,打印出最大值 # m = int(input('Input first number >>>')) while True: c = input('Input a n ...

  6. python3.7安装模块MySQLdb报错error: Microsoft Visual C++ 14.0 is required.

    error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools&quo ...

  7. HDU 4725 建图

    http://acm.hdu.edu.cn/showproblem.php?pid=4725 The Shortest Path in Nya Graph Time Limit: 2000/1000 ...

  8. WinForm---进度条的实现方法

    (转自:http://www.cnblogs.com/Sue_/articles/2024932.html) 看了好几个WinForm程序了,发现他们对进度条的处理完全失去了进度条的作用.他们都是采用 ...

  9. 【lightoj-1039】A Toy Company(BFS)

    The toy company "Babies Toys" has hired you to help develop educational toys. The current ...

  10. python django框架(一)

    s4day63内容回顾: 1. 安装 2. 创建用户 + 授权 3. 连接 - 数据库 终端创建数据库(字符编码) - 数据表 终端 ORM pymysql create ...)engine=inn ...