python学习笔记2.4-数据结构之列表和元组

python语言中包含的数据结构比较简单,除了简单的变量以外,还有列表(元组)、字典、集合。对于数据结构的操作一般包含四种:增、删、查、改。本文主要介绍列表(list)(包括元组tuple)的操作。 python中的list是一个有序动态集合,能够随时向其中添加或者删除元素,而tuple则相反,是一个有序静态集合,即一旦创建就不能随修改。

list

  • 创建(初始化)。list中的元素可以为任意类型,整型、字符型、列表、字典都可以.元素之间用逗号(,)隔开,整个list用[ ]包围。
la = [1,2,3]
lb = [1.2, 88, 'ss' ]
lc = [] # 空列表,也可以这样创建: lc = list()
ld = [[1, 3,5],{'s':8}, 'ss', 2.5, 6] # list的元素很灵活,只要是对象即可
  • 删除。list的删除很简单,直接使用python删除关键字:del 删除的内容, 这里删除的内容即可以是整个list,也可以是list中的某一个元素。
a = ['s','b', 'c']
del a[1] # 删除元素b
del a # 删除整个list
  • 查找(索引)。list是一个有序集合,即通过元素的下标来索引元素,与c/c++类似,第一个元素的下标为0(MATLAB的第一个下标为1)。
a = [i for i in range(10)]
for i in range(10):
    print(a[i])

除了能正向索引,还能反向索引,并不需要知道list的长度,list的第一个元素的下标为0,最后一个元素的下标为-1,一次向前减一,即倒数第二个元素下标为-2

a = [i for i in range(10)]
a[-1]  # 最后一个元素,打印出来为9
a[-2]  # 倒数第二个元素,打印出来为8

除了上述通过索引来获取单个元素,还可以通过区间下标(左闭右开)来一次索引很多元素,python中称为这种方式为切片,需要注意的是区间下标为左闭又开,即不会索引到右边下标对应的元素,只会索引到它前一个元素。

a = [i for i in range(1,10,2)]
print(a[1:3]) # 打印元素3和5
print(a[1:-1]) # 第二个到倒数第二个
print(a[1:]) # 第二个以后的全部元素

屏幕输出:

[3, 5]
[3, 5, 7]
[3, 5, 7, 9]
  • 修改。修改list一般有两种方式:
    • 在list末尾直接增加元素,这样也增加了索引,增长了列表长度。通过append()方法实现
    • 修改已有索引的元素的值,这样不增加索引,也不会增加列表的长度。
a = [1,4,3]
a.append(5) # 在末尾增加
a[2] = 9 # 通过索引直接修改
  • list的操作符操作。对于 list也可以使用len()、+、* 等操作符,len(list)用来获取list的长度(最大索引值+1),+ 号用于组合列表,* 号用于重复列表。
a = [7,'ww','ii']
length = len(a)
b = [9,44]
c = a + b #直接将a、b首尾相连
d = a*4 # 将列表a重复4次,并生成一个新的列表

*对于列表的操作只要没有赋值,就不会修改原列表的值,只会返回一个新的列表。例如上例中的+和操作、以及索引或者切片操作,都不会修改原list的值。*

  • list包含的其他方法:

方法

功能

list.append(obj)

在列表末尾添加新的对象

list.count(obj)

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

list.extend(seq)

在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

list.index(obj)

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

list.insert(index, obj)

将对象插入列表

list.pop(obj=list[-1])

移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

list.remove(obj)

移除列表中某个值的第一个匹配项

list.reverse()

反向列表中元素

list.sort([func])

对原列表进行排序

tuple

元组(tuple)是静态列表,初始化后就不能随表修改,用小括号( )表示,用下标索引,与list相比,没有修改的功能,其他都一样。在定义元组的时候我们需要注意:因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义。因此,Python规定,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义

t = (3,5)
t = (4, ) # 只有一个元素时,一定要记得加,
t = (1,'2','ss',['e','y']) #当元组中的元素为可修改的对象,比如list和dict时,这里的list和dict能够修改。
t[3][0] = 1 #  这里修改的是list而不是tuple,因为tuple的索引没有变
t[0]  # 与list一样,用下标索引

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

【Python 第70课】lambda 表达式

Python 是一门简洁的语言,lambda 表达式则充分体现了 Python 这一特点。 lambda 表达可以被看做是一种匿名函数。它可以让你快速定义一个...

2916
来自专栏http://www.cnblogs.com

python学习笔记:深浅拷贝的使用和原理

在理解深浅拷贝之前,我们先熟悉下变量对象和数据类型 1.变量和对象 变量-引用-对象(可变对象,不可变对象) 在python中一切都是对象,比如[1,2],'h...

3336
来自专栏啸天"s blog

Java中的关键字

1325
来自专栏前端知识分享

第171天:面向对象——对象实例和原型对象进阶

这样,如果我们需要修改所有实例中的属性或者方法,就只需要修改一处,就能够影响到所有实例了

563
来自专栏数据之美

python基础(5):深入理解 python 中的赋值、引用、拷贝、作用域

在 python 中赋值语句总是建立对象的引用值,而不是复制对象。因此,python 变量更像是指针,而不是数据存储区域, ? 这点和大多数 OO 语言类似吧,...

1977
来自专栏程序员互动联盟

【编程基础】C语言指针函数和函数指针

往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂。下面详细为大家介绍C语言中指针函数和函数指针。 一、指针函数 当一个函数声明其返回值为一个指针时,实...

34910
来自专栏柠檬先生

你不知道的javaScript笔记(5)

原生函数   常用的原生函数     String()     Number()     Boolean()     Array()     Object() ...

18210
来自专栏程序生活

Java学习(二)Static关键字的理解

在讲Static之前,引入一个小题 ? 答案为“c” ? 运行结果 Cannot make a static reference to the non-stat...

3428
来自专栏超然的博客

ECMAScript 6 笔记(三)

  ES6 的写法还有两个好处:首先,阅读代码的人,可以立刻意识到哪些参数是可以省略的,不用查看函数体或文档;其次,有利于将来的代码优化,即使未来的版本在对外接...

672
来自专栏程序员互动联盟

【编程基础】深入理解Java中的final关键字

Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使...

34210

扫码关注云+社区