《Python基础教程第二版》第二章-Python列表和元祖

序列

例:

Edward = ['abc', 12]

序列中的所有元素都是有编号的,从0开始递增。

Note: 使用负数索引-1,Python会从右边,也就是从最后一个元素开始计数。最后一个元素的位置编号是-1.

索引操作

字符串、函数可以直接对返回结果进行操作

‘hello’[1]
fo = raw_input('year: ')[2]

分片

分片通过冒号隔开两个索引。

代码:

numbers = [1, 2, 3, 4]
number[1:2]

输出:

[2, 3]

第一个索引:

提取的第一个元素的编号

第二个索引:

分片之后,剩余部分的第一个元素的编号。
Note:分片第二个索引指向的元素取不到。

简而言之:

分片操作的实现需要两个索引作为边界。
第一个索引元素是包含在分片内的。
第二个索引元素不在分片内。

思考:

numbers = [1,2,3,4,5,6,7,8,9,10]
如何访问最后3个元素。

1.显示操作

numbers[7:10]
#索引10指向第11个元素,第11个元素不存在。为了让分片包含最后一个元素,必须提供最后一个元素的下一个元素的索引作为边界。

2.从尾开始计数(不可行)

numbers[-3:-1]
#无法访问最后一个元素

3.使用索引0访问最后一个元素(不可行)

numbers[-3:0]
#只要分片最左的索引比右边的晚出现在序列中,一律返回空序列。

4.置空最后一个索引(优雅,推荐)

numbers[-3:]

同样适用序列开始的元素:

numbers[:3]

复制序列

复制整个序列,将两个索引都置空。

number2 = numbers[:]
note:
 number2 = numbers
 #不可行,会将number2与numbers指向同一个序列

步长

第三个参数是步长。Python中默认步长为1.

numbers[0:10:2]
#取步长为2,取间隔为1个元素的分片。

Note:

步长不能为0。
负数步长,分片从右到左提取元素。

序列加法、乘法

endings = ['st','nd',‘rd’] + 17*['th']\
    + ['st','nd',‘rd’] + ['th']*7
#17*['th']表示17个['th']

空列表、None

空列表

[]

用None初始化

seq = [None]*10

成员资格

in运算符:布尔运算符,检查值是否在序列中。

subject = '$$$ abssdjk $$$!'   
'$$$' in subject

users = ['bob','jack']
raw_input('your name:') in users

长度、最小值和最大值

内建函数

len、min、max

len函数

返回序列中所有包含元素的数量

min函数、max函数

返回序列中最大和最小的元素

Note:

序列包括:
    列表、字符串、元组
故:以上序列的特种对于列表字符串和元组都适用。

列表

列表可以修改:

  • 元素赋值
  • 元素删除
  • 分片赋值
  • 列表方法

list函数

用于创建列表,适用于所有类型的序列,例如字符串

例:

list('hello')#根据字符串创建列表['h','e','l','l','o']

列表转字符串

''.join(somelist)

列表基本操作

1. 元素赋值
 2. 删除元素
 3. 分片赋值

1. 元素赋值

x = [1,2,3]
x[1] = 6

2. 删除元素

names = ['bob','jack','afra']
del names[2]
#列表长度减一

3. 分片赋值

name = list('afra')
name[1:] = list('lpha')

分片赋值:
1.可以使用与原序列不等长的序列将分片替换

name = list('perl')
name[1:] = list('ython')

2.可以在不需要替换任何原有元素的情况下插入新元素

number = [1,5]
number[1:1] = [2,3,4]

3.可以删除元素

number = [1,2,3,4,5]
number[1:4] = []

列表方法

方法:

一个与某些对象有紧密联系的函数。

方法调用:

对象.方法(args)

列表方法

1.append
2.count
3.extend
4.index
5.insert
6.pop
7.remove
8.reverse
9.sort
10.高级排序

1.append
在列表末尾追加新对象,直接修改原列表

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

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

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

3.extend
在列表末尾一次性追加另一序列的多个值。即:用新列表扩展原因的列表。
Note:

extend和连接操作'+'的区别:
    extend方法修改了序列
    原始的连接操作不修改序列,返回一个全新的列表
    连接操作效率比extend方法低

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

knight = ['hao','a']
knight.index('hao')

5.insert
将对象插入到列表中。

numbers = [1,2,3]
number.insert(3,'four')

6.pop
移除列表中的一个元素(默认最后一个),返回该元素的值。
pop方法是唯一修改列表又返回元素值的列表方法。
Python中实现栈:,出栈pop,入栈append

x[1,2,3,4]
x.pop()
x.pop(0)

Note:在JavaScript中,pop只弹出栈顶值,不会返回栈顶值,可使用top()获取栈顶值

7.remove
移除列表中某个值的第一个匹配项。修改列表,没有返回值。

x = ['i','want','to','to']
x.remove('to')

8.reverse
将列表倒置。改变列表,没有返回值。

x = [1,2,3]
x.reverse()

9.sort
在原位置对列表排序。修改列表,返回None。

x = [8,7,2,43,45]
x.sort()

思考:

用户需要一个排好序的列表副本,但是保留原有列表不变。

思路:

把x的副本赋值给y,对y进行排序。

代码:

x = [1,2,4,5,6,1,23,2,2,3,]
y = x[:]
y.sort()
#强调:x[:]是一种很有效率的复制整个列表的方法。只是简单的把x赋值给y,会让x和y都指向同一个列表。

使用sorted函数

#获取已排序的列表的副本
x = [1,3,4,5,2]
y = sorted(x)
#note:sort()是列表方法,sorted是函数

10.高级排序

1.cmp自定义比较函数

numbers.sort(cmp)

2.key 为每个元素创建一个键,根据键排序

numbers.sort(key = len)

3.reverse = true

numbers.sort(reverse = true)

元组

圆括号表示,不可修改

(1,2,3)

空元组

()

一个值的元组

(42,)

Note:

必须加逗号,即使只有一个值。逗号非常重要。
(4+2) #不是元组
 (4+2,) #是元组

tuple函数

一序列作为参数转换为元组

tuple([1,2,3])#(1,2,3)
tuple('abc')#(a,b,c)

相关推荐