一、简介

数据结构是通过某种方式组织在一起的数据元素的集合。

序列是python中最基本的数据结构,python中包含6种内建的序列,分别是列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。

二、使用

比如说现在想用一个列表存储用户的名称和年龄,可以在python中创建列表:

dotgua = ['dotgua', 24]

这里非常像是一个数组,不过这里可以看到列表中可以存放不同的数据类型。

通用序列操作

序列的基本操作包括:索引(indexing)、分片(slicing)、加(adding)、乘(multiplying)以及成员检查,以下都以列表为例

√ 索引

序列可以根据元素的编号访问--从0开始递增,例如:

>>> dotgua = ['dotgua', 24]
>>> dotgua[0]
'dotgua'

索引也可以是负数,使用负数时python会从右边向左计数:

>>> dotgua[-1]
24

字符串本身也可以看做是列表:

>>> 'dotgua'[2]
't'

下面是一个示例程序,根据输入的年月日输出相应的日期的月份名称

#!/usr/bin/env python
# 根据给定的年月日以数字形式打印出日期
months = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
] # 以1~31的数字作为结尾的列表
endings = ['st', 'nd', 'rd'] + 17 * ['th'] + \
['st', 'nd', 'rd'] + 7 * ['th'] + ['st'] year = input('Year: ')
month = input('Month(1-12): ')
day = input('Day(1-31): ') month_number = int(month)
day_number = int(day) # 将月份和天数减1获得正确的索引
month_name = months[month_number-1]
ordinal = day + endings[day_number-1] print(month_name + ' ' + ordinal + ', ' + year)

√ 分片

分片用来访问一定范围内的元素。通过冒号隔开的两个索引实现

>>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> numbers[2:4]
[2, 3]

可以看到,第一个索引指定开始元素的索引,第二个则是最后一个元素的下一个位置的索引

分片也可以使用负数,负数即是从后向前计数

>>> numbers[-3:-1]
[7, 8]

但是可以发现,这样没法取得最后一个元素,如果想取得最后一个元素,省略第二个索引即可

>>> numbers[-3:]
[7, 8, 9]

同理,第一个索引也可以省略,即从第一个元素到第二个索引指定的元素

>>> numbers[:3]
[0, 1, 2]

甚至,两个索引都可以省略,即获取整个列表,这在复制列表时比较有用

>>> numbers[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

分片还可以设置步长:

>>> numbers[0:10:2]
[0, 2, 4, 6, 8]

步长也可以为负数:

>>> numbers[10:0:-3]
[9, 6, 3]

√ 序列相加

>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]

√ 序列乘法

>>> 'python' * 5
'pythonpythonpythonpythonpython'
>>> [4] * 10
[4, 4, 4, 4, 4, 4, 4, 4, 4, 4]

用None来初始化列表,None表示什么都没有

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

√ 成员资格

检查一个元素是否在序列中可以使用in运算符

>>> 5 in numbers
True

以下的示例模仿检查用户名密码是否正确:

database = [
['dotgua', '1234'],
['dotdai', '4567'],
]
username = input('User name: ')
password = input('password: ')
if [username, password] in database:
print('Access granted')
else:
print('Not granted')

√ 长度、最大值和最小值

len()返回序列的长度

max()返回序列的最大值

min()返回序列的最小值

>>> len(numbers)
10
>>> max(numbers)
9
>>> min(numbers)
0

三、列表

1. list函数

list函数可以将字符串转化为单个字符的列表:

>>> list('dotgua')
['d', 'o', 't', 'g', 'u', 'a']

join可以执行相反操作:

''.join(['d', 'o', 't', 'g', 'u', 'a'])

2. 基本操作

元素赋值

根据索引即可修改

删除元素

使用del关键字删除某个位置的元素

>>> del numbers[2]
>>> numbers
[0, 1, 3, 4, 5, 6, 7, 8, 9]

分片赋值

分片操作可以一次赋值或添加多个元素

>>> numbers = [1, 2, 3]
>>> numbers[3:] = [4, 5, 6]
>>> numbers
[1, 2, 3, 4, 5, 6]

也可以在添加元素的同时删除元素

>>> numbers = [1, 2, 3]
>>> numbers[1:] = [4, 5, 6]
>>> numbers
[1, 4, 5, 6]

或者只删除元素

>>> numbers[1:] = []
>>> numbers
[1]

3. 列表方法

append

追加新元素

count

统计某个元素出现的次数

extend

追加另一个序列

index

找到第一个匹配项的位置

insert

将元素插入到列表中

pop

移除列表中的一个元素(默认是最后一个)

remove

python学习笔记02--列表和元组的更多相关文章

  1. python学习笔记之列表与元组

    一.概述 python包含6种内建的序列,其中列表和元组是最常用的两种类型.列表和元组的主要区别在于,列表可以修改,元组则不能修改 使用上,如果要根据要求来添加元素,应当使用列表:而由于要求序列不可修 ...

  2. Python学习笔记_week2_列表、元组、字典、字符串、文件、i编码

    一. 列表.元组 names=["A","B","C","D"] print(names) print(names[0] ...

  3. python学习笔记(2)--列表、元组、字符串、字典、集合、文件、字符编码

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1.列表和元组的操作 列表是我们以后最长用的数据类型之一,通过列表可以最方便的对数据实现最方便的存储.修改等操作 定 ...

  4. python学习笔记(列表、元组、购物车实例)

    一.列表 列表和字典是最常用的两种数据类型 1. 需求:怎么存放班级80多人的姓名,如何实现? names = ["Zhangyang","Guyun",&qu ...

  5. Python学习笔记只列表和元组

    一.成员资格 1.检查某个字符是否在某个字符串中:'a' in 'absent' 2.获取数组的长度.最大.最小值: numbers=[100,54,345] len(numbers) //长度 ma ...

  6. python学习笔记整理——列表

    Python 文档学习笔记 数据结构--列表 列表的方法 添加 list.append(x) 添加元素 添加一个元素到列表的末尾:相当于a[len(a):] = [x] list.extend(L) ...

  7. 【python学习笔记02】python的数据类型2

    列表和元组之间的主要区别是:列表括在括号([])和它们的元素和大小是可以改变的,而元组在圆括号(),不能被更新.元组可以被认为是只读列表. 存储在一个列表中的值可以使用切片操作符来访问([]和[:]) ...

  8. python学习笔记-02

    四.函数 1.定义函数 (1)定义规则 介绍列表方法的时候已经大概说过函数,学过数学的人都知道函数,给一个参数返回一个值.函数也可以自己定义.用如下的格式: >>>def 函数名(参 ...

  9. python学习笔记(一)元组tuple

    元组由简单的对象组构成,元组与列表相似,但是元组不能在原处修改.元组位置有序的对象集合,元组通过偏移来访问. 为什么有了列表还要元组?元组的不变性提供了某种完整性,可以确保元组在程序中不被另一个引用修 ...

随机推荐

  1. ----关于position的四个标签----

    从[ two1-4 ]分别为absolute,fixed,static,relative标签 四个标签下位移值相同,[ two2 ]和[ two1 ]都出现在左上角,[ two2 ] 盖住了[ two ...

  2. Rsync的一般使用需求

    rsync 只同步指定类型的文件 需求: 同步某个目录下所有的图片(*.jpg),该目录下有很多其他的文件,但只想同步*.jpg的文件. rsync 有一个--exclude 可以排除指定文件,还有个 ...

  3. Golang 调用 Python 代码

    go 中的 cgo 模块可以让 go 无缝调用 c 或者 c++ 的代码,而 python 本身就是个 c 库,自然也可以由 cgo 直接调用,前提是指定正确的编译条件,如 Python.h 头文件( ...

  4. WPF 依赖属性&附加属性

    依赖属性 暂无 附加属性 1.在没有控件源码的前提下增加控件的属性 2.多个控件需要用到同一种属性 使用附加属性可以减少代码量,不必为每一个控件都增加依赖属性 3.属性不确定是否需要使用 在某些上下文 ...

  5. 【接口时序】3、UART串口收发的原理与Verilog实现

    一.软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1.FPGA型号:XC6SLX45- ...

  6. jquery中$().each() 和$.each()

    // 形参1: 当前的下标 // 形参2: 当前的dom节点元素 $('#div1').find('div').each(function (i, item) { // this === item 当 ...

  7. Vue自定义指令,ref ,sync,slot

    一.自定义指令 vue中可以自己设置指令,通过directive来实现,有2种创建方式,一种是局部创建,一种是全局创建. 第一种:局部创建 如果想注册局部指令,组件中也接受一个 directives  ...

  8. Eclipse 中 Debug 调试 java 代码一直报 Source not found

    今天使用eclipse的debug调试代码,一直没法正常调试,一按F6就提示Source not found 根据提示发现可能是另一个项目影响了,所以把另一个项目Close Project,这次直接t ...

  9. PHP利用Session实现上传进度

    实现文件上传进度条基本是依靠JS插件或HTML5的File API来完成,其实PHP配合ajax也能实现此功能. PHP手册对于session上传进度是这么介绍的: 当 session.upload_ ...

  10. 华硕FX503V 安装ubuntu遇到问题解决

    关机进bios,确保secure boot是关闭的,第一启动项设为带有uefi 的U盘,也就是ubuntu安装盘,F10保存退出; 接下来会进入grub界面,选择install ubuntu,不要按e ...