1.7 列表和元组

4/12/2018 Python

# 一、 什么是数据结构

在计算机科学中,数据结构(英语:data structure)是计算机中存储、组织数据的方式。

# 1. Python 中核心数据结构分类

  • 序列类型: 字符串、列表、元组
  • 映射类型: 字典
  • 集合: set()

在 Python中列表、元组、字典、集合都称为容器。

# 2. 序列类型数据结构共有的特点:

  • 序列类型中的元素都有对应的位置,这个位置叫偏移量或者索引

千锋云计算



# 二、列表

# 1. 列表的特性介绍

  • 列表内的元素是可变的。 -> 列表的元素可以是 Python 的任何类型的数据和对象

    如:字符串、列表、元组、字典、集合、函数、类
    
  • 列表中的具有相同值的元素允许出现多次

[1, 2, 1, 1, 1, 1, 3, 3, 2]
1

# 2. 创建列表

image.png

# 嵌套的列表

列表中可包含 python 中任何类型的元素(对象),当然也可以包括一个或多个列表

li = [['one', 'two', 'three'], [1, 2, 3]]
1

# 3.列表的基本操作

# 3.1 取值

# 没有嵌套的列表取值

li_f = [ 'insert', 'append','extend', 'remove', 'pop', 'sort', 'sorted']

li_f[0]   # insert
1
2
3

# 嵌套的列表取值

l2 = [['one', 'two', 'three'], [1, 2, 3]]
1
l2[0][1]  # two
1

# 3.2 切片

同字符串的切片一样,详情参考字符串教程 (opens new window)中的切片

几点简单示例

li_f = [ 'insert', 'append','extend', 'remove', 'pop', 'sort', 'sorted']

# 获取全部元素
li_f[:]

# 反转
li_f[::-1]
1
2
3
4
5
6
7

# 3.3 必会方法

# 先定义一个列表
li = [5, 4, 3, 2, 1, 0]
1
2

len()
方法是一个内置函数,可以统计序列类型的数据结构的长度。

n = len(li)
print(n)
1
2

in
判断元素是否存在于列表中。

In [3]: li = ['lenovo', 1314, '521']

In [4]: '521' in li
Out[4]: True

In [5]: 1314 in li
Out[5]: True

In [6]: if 'lenovo' in li:
   ...:     print('ok')
   ...:
ok

In [7]:
1
2
3
4
5
6
7
8
9
10
11
12
13
14

append() 向列表的最后位置,添加一个元素,只接收一个参数。

In [7]: li.append(521)

In [8]: li
Out[8]: ['lenovo', 1314, '521', 521]

1
2
3
4
5

insert() 向原列表的指定位置插入一个元素,接收两个参数, 第一个是索引号,第二个是要插入的元素。

In [9]: li.insert(0, 521)

In [10]: li
Out[10]: [521, 'lenovo', 1314, '521', 521]
1
2
3
4

extend() 可以把一个序列类型中的每个元素追加到原列表中,接收的参数是一个序列类型的数据(字符串,列表)。

In [11]: l2 = ['qf','yangge']

In [12]: li.extend(l2)

In [13]: li
Out[13]: [521, 'lenovo', 1314, '521', 521, 'qf', 'yangge']

1
2
3
4
5
6
7

remove() 移除列表中某个指定的元素,没有返回值,并且假如有多个相同值的元素存在,每次只会移除排在最前面的那个元素

In [14]: li.remove(521)

In [15]: li
Out[15]: ['lenovo', 1314, '521', 521, 'qf', 'yangge']
1
2
3
4

pop()

从原列表中删除一个元素,并且把这个元素返回。 接收零个或一个参数,参数是偏移量,int 类型。

# 删除列表中的最后一个元素
In [16]: name = li.pop()

In [17]: name
Out[17]: 'yangge'

In [18]: li
Out[18]: ['lenovo', 1314, '521', 521, 'qf']

 # 删除列表中第二个索引号对应的元素,并且返回这个元素,用变量名`n` 接收。  
In [19]: n = li.pop(-2)

In [20]: n
Out[20]: 521

In [21]: li
Out[21]: ['lenovo', 1314, '521', 'qf']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 循环列表

for-list.py 文件内容如下:

li = ['lenovo', 1314, '521', 'qf']

for item in li:
    print(item)
1
2
3
4

执行

python3 for-list.py
1

输出结果

lenovo
1314
521
qf
1
2
3
4


# 三、元组

# 1 元组特性介绍

  • 元组和列表一样,也是一种序列。
  • 唯一的不同是,元组是相对不可变的。

# 2 高效创建元组

t1 = ()    # 创建 空 元素的元组
1
  • 你以为这就完了?

    单一元素元组怎么搞?

In [168]: v_tp = (3)

In [169]: only_tp = 3,

In [170]: type(v_tp)

Out[170]: int

In [171]: type(only_tp)
Out[171]: tuple
1
2
3
4
5
6
7
8
9
10

创建非空元素的元组是用逗号,而不是用小括号

tuple() 可以对其他序列类型的数据转换为元组。

In [173]: s1 = 'car'

In [174]: li = [1,2,3]

In [175]: tuple(s1)
Out[175]: ('c', 'a', 'r')

In [176]: tuple(li)
Out[176]: (1, 2, 3)

In [177]: dl = [1,2,3,['a','b']]

In [178]: tuple(dl)
Out[178]: (1, 2, 3, ['a', 'b'])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
In [33]: t1 = (1, 2, 3, ['a', 'b'])
In [34]: t1[3][0]=0
In [35]: t1
Out[35]: (1, 2, 3, [0, 'b'])
1
2
3
4

# 3. 循环元组

for-tuple.py 文件内容

t = ('lenovo', 1314, 521)

for item in t:
    print(item)
1
2
3
4

执行

python3 for-tuple.py
1

输出结果

lenovo
1314
521
1
2
3

# 4. 使用元组的理由

给我一个理由

  1. 占用内存空间小
  2. 元组内的值不会被意外的修改
  3. 可作为字典的键
  4. 函数的参数是以元组形式传递的
  5. 命名元组有时候可以代替类的对象(面向对象的时候讲)