一文搞懂Python中列表List和元组Tuple的使用

目录
  • 列表 List
    • 列表是有序的
    • 列表可以包含任意对象
    • 通过索引访问列表元素
    • 列表嵌套
    • 列表可变
  • 元组 Tuple
    • 定义和使用元组
    • 元素对比列表的优点
    • 元组分配、打包和解包
  • List 与 Tuple 的区别

列表 List

列表是任意对象的集合,在 Python 中通过逗号分隔的对象序列括在方括号 ( [] ) 中

people_list = ['曹操', '曹丕', '甄姫', '蔡文姫']

print(people_list)
['曹操', '曹丕', '甄姫', '蔡文姫']

people_list
['曹操', '曹丕', '甄姫', '蔡文姫']

列表是有序的

列表是对象的有序集合。定义列表时指定元素的顺序是该列表的固有特征,并在该列表的生命周期内保持不变

# 具有不同顺序的相同元素的列表是不相同的。
list_ = ['曹操', '曹丕', '甄姫', '蔡文姫']
list_b = ['甄姫', '蔡文姫', '曹丕', '曹操']

list_ == list_b
False

list_ is list_b
False

列表可以包含任意对象

列表的元素都可以是同一类型

list_ = ['曹操', '曹丕', '甄姫', '甄姫']
list_
['曹操', '曹丕', '甄姫', '甄姫']

元素可以是不同的类型

list_ = [21.42, '曹操', 3, 4, '曹丕', False, 3.14159]
list_
[21.42, '曹操', 3, 4, '曹丕', False, 3.14159]

列表甚至可以包含复杂的对象(函数、类和模块)

int
<class 'int'>

len
<built-in function len>

def Dynasty_Warriors():
	pass
Dynasty_Warriors
<function Dynasty_Warriors at 0x000002A96EAB1840>

import math
math
<module 'math' (built-in)>

list_ = [int, len, Dynasty_Warriors, math]
list_
[<class 'int'>, <built-in function len>, <function Dynasty_Warriors at 0x000002A96EAB1840>,<module 'math' (built-in)>]

列表对象不必是唯一的。给定对象可以多次出现在列表中

list_ = ['曹丕', '甄姫', '甄姫', '曹丕', '甄姫', '曹丕']
list_
['曹丕', '甄姫', '甄姫', '曹丕', '甄姫', '曹丕']

通过索引访问列表元素

像字符串一样列表索引可以使用方括号中的索引访问列表中的各个元素

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫']

list_[0],list_[2]
('曹操', '甄姫')

list_[-1],list_[-2]
('蔡文姫', '甄姫')

切片表达式 [m:n] 返回索引 m 到 n 包括索引 n 的元素。

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫']
list_[2:4]
['甄姫', '蔡文姫']

字符串切片的其他特性也适用于列表切片

正索引和负索引

list_[-5:-2]
['曹操', '曹丕']

list_[0:2]
['曹操', '曹丕']

list_[-5:-2] == list_[0:2]
True

省略索引开头和结束索引

print(list_[:2], list_[0:2])
['曹操', '曹丕']['曹操', '曹丕']

print(list_[2:], list_[2:len(a)])
['甄姫', '蔡文姫']['甄姫', '蔡文姫'] 

list_[:4] + list_[4:]
['曹操', '曹丕', '甄姫', '蔡文姫']

list_[:4] + list_[4:] == list_
True

指定步幅的正负索引

list_[0:4:2]
['曹操', '甄姫']

list_[1:4:2]
['曹丕', '蔡文姫']

list_[4:0:-2]
['蔡文姫', '曹丕']

反转列表

list_[::-1]
['蔡文姫', '甄姫', '曹丕', '曹操']

运算符和内置函数处理列表

运算符 in 和 not in

list_
['曹操', '曹丕', '甄姫', '蔡文姫']

'蔡文姫' in list_
True
'曹仁' not in list_
True

连接( + )和复制( * )运算符

list_ = ['曹操', '曹丕']

list_ + ['甄姫', '蔡文姫']
['曹操', '曹丕', '甄姫', '蔡文姫']
list_ * 2
['曹操', '曹丕', '甄姫', '蔡文姫' '曹操', '曹丕', '甄姫','蔡文姫']

函数 len()、min()、max()

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫']

len(a)
4

min(list_ )
'曹丕'

max(list_ )
'蔡文姫'

列表嵌套

列表中的元素可以是任何类型的对象,一个列表可以包含子列表,而子列表又可以包含子列表本身,依此类推。

常规嵌套列表操作

list_ = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', ['hh', 'ii'], 'j']
['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', ['hh', 'ii'], 'j']

# list_[0], list_[2], 和list_[4]是字符串
print(list_[0], list_[2], list_[4])
a g j

# list_[1]和list_[3]是子列表
list_[1]
['bb', ['ccc', 'ddd'], 'ee', 'ff']

list_[3]
['hh', 'ii']

# 访问子列表中的元素需附加索引
list_[1]
['bb', ['ccc', 'ddd'], 'ee', 'ff']

list_[1][0]
'bb'

list_[1][1]
['ccc', 'ddd']

list_[1][2]
'ee'

list_[1][3]
'ff'

list_[3]
['hh', 'ii']

print(list_[3][0], list_[3][1])
hh ii

# list_[1][1]是另一个子列表,访问需要添加索引
list_[1][1]
['ccc', 'ddd']
print(list_[1][1][0], list_[1][1][1])
ccc ddd

# 索引和切片的常用语法也适用于子列表。
list_[1][1][-1]
'ddd'

list_[1][1:3]
[['ccc', 'ddd'], 'ee']

list_[3][::-1]
['ii', 'hh']

# in 操作符使用。
'ddd' in x
False
'ddd' in x[1]
False
'ddd' in x[1][1]
True

列表可变

创建列表后,可以随意添加、删除、移动和移动元素。

修改单个列表值

列表中的值可以通过索引和简单赋值进行替换。

s = '曹操,曹丕,甄姫'
s[2] = '蔡文姫'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

使用 del 命令删除列表项

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫']

del list_[3]

list_
['曹操', '曹丕', '甄姫']

修改多个列表值

切片实现 a[m:n] = <iterable> 序列迭代替换值

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫']

list_[1:4]
['曹丕', '甄姫', '蔡文姫']

list_[1:4] = [1.1, 2.2, 3.3, 4.4, 5.5]

list_
['曹操', 1.1, 2.2, 3.3, 4.4, 5.5]

多个元素来代替单个元素

list_ = [1, 2, 3]

list_[1:2] = [2.1, 2.2, 2.3]
list_
[1, 2.1, 2.2, 2.3, 3]

list_ = [1, 2, 3]
list_[1] = [2.1, 2.2, 2.3]
list_
[1, [2.1, 2.2, 2.3], 3]

list_ = [1, 2, 7, 8]
list_[2:2] = [3, 4, 5, 6]
list_
[1, 2, 3, 4, 5, 6, 7, 8]

切片分配空列表删除列表中间的多个元素

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫']
list_[1:4] = []
list_
['曹操']

列表附加元素或元素附加到列表

list_ = ['曹操', '曹丕']

list_ += [ '甄姫', '蔡文姫']

list_
['曹操', '曹丕', '甄姫', '蔡文姫']

list_ = [10, 20] + list_
list_
[10, 20, '曹操', '曹丕', '甄姫', '蔡文姫']

列表拼接元素的方法不能直接添加

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫']

list_ += 20
Traceback (most recent call last):
  File "<pyshell#58>", line 1, in <module>
    list_ += 20
TypeError: 'int' object is not iterable

list_ += [20]
list_
['曹操', '曹丕', '甄姫', '蔡文姫', 20]

append(<obj>) 将对象附加到列表中

list_ = ['曹操', '曹丕']

list_.append(123)
list_
['曹操', '曹丕', 123]

x = list_.append(123)
print(x)
None

list.extend(<iterable>),追加元素

list_ = ['曹操', '曹丕']

list_.extend([1, 2, 3])
list_
['曹操', '曹丕', 1, 2, 3]

list.insert(<index>, <obj>),插入元素

将对象插入列表

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫']
list_.insert(3, 3.14159)

list_[3]
3.14159

list_
['曹操', '曹丕', '甄姫', 3.14159, '蔡文姫']

list.remove(<obj>),按照元素删除元素

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫']
list_.remove('甄姫')
list_
['曹操', '曹丕', '蔡文姫']

# 如果<obj>不在中列表,则会引发异常。
list_.remove('曹丕k')
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    list_.remove('曹丕k')
ValueError: list.remove(x): x not in list

list.pop(index=-1),按索引删除元素

从列表中删除一个元素,需要指定索引并返回被移除的项目的值,pop(-1) 等价于 pop()

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫']

list_.pop()
'蔡文姫'

list_
['曹操', '曹丕', '甄姫']

list_.pop()
'甄姫'

list_
['曹操', '曹丕']

列表是动态的,随着项目数据的变化而变化

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫']
# 数据增加
list_ [2:2] = [1, 2, 3]
list_  += [3.14159]
list_
['曹操', '曹丕', 1, 2, 3, '甄姫', '蔡文姫', 3.14159]

# 数据删除
a = ['曹操', '曹丕', '甄姫', '蔡文姫']
a[2:3] = []
del a[0]
a
['曹丕', '蔡文姫']

元组 Tuple

对象的有序集合,称为元组。与列表的区别在于元组是通过括号 ( () ) 而不是方括号 ( [] ) 中来定义的,以及元素不可变。

定义和使用元组

t = ('曹操', '曹丕', '甄姫', '蔡文姫')

t
('曹操', '曹丕', '甄姫', '蔡文姫')

t[0]
'曹操'

t[-1]
'蔡文姫'

t[1::2]
('曹丕', '蔡文姫')

# 可以进行倒序排列
t[::-1]
('蔡文姫', '甄姫', '曹丕', '曹操')

# 元组不可修改
t = ('曹操', '曹丕', '甄姫', '蔡文姫')
t[2] = '曹丕k'
Traceback (most recent call last):
  File "<pyshell#65>", line 1, in <module>
    t[2] = '曹丕k'
TypeError: 'tuple' object does not support item assignment

元素对比列表的优点

  • 处理速度更快
  • 防止被意外修改
  • 字典需要不可变更类型的值作为组件
# 元素用,分割
a = '曹操'
b = 42
a, 3.14159, b
('曹操', 3.14159, 42)

# 定义一个空的元组
t = ()
type(t)
<class 'tuple'>

# 定义项目的元组
t = (2,)

type(t)
<class 'tuple'>

t[0]
2

t[-1]
2

# 元组单一元素会包含符号
print(t)
(2,)

元组分配、打包和解包

可以将包含多个项目的文字元组分配给单个对象。

t
('曹操', '曹丕', '甄姫', '蔡文姫')

t[0]
'曹操'

t[-1]
'蔡文姫'

被打包的对象直接被分配新的元组中,并解释到各个元组对象。

(s1, s2, s3, s4) = t

s1
'曹操'

s2
'曹丕'

s3
'甄姫'

s4
'蔡文姫'

解包时,左边的变量个数必须与元组中的值个数相匹配

(s1, s2, s3) = t
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    (s1, s2, s3) = t
ValueError: too many values to unpack (expected 3)

(s1, s2, s3, s4, s5) = t
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    (s1, s2, s3, s4, s5) = t
ValueError: not enough values to unpack (expected 5, got 4)

打包、解包一步操作

(s1, s2, s3, s4) = ('曹操', '曹丕', '甄姫', '蔡文姫')

s1, s2, s3, s4 = '曹操', '曹丕', '甄姫', '蔡文姫'

s1
'曹操'
s2
'曹丕'
s3
'甄姫'
s4
'蔡文姫'

元组互换进行互换赋值

a = '曹操'
b = '曹丕'

a, b
('曹操', '曹丕')

a, b = b, a
a, b
('曹丕', '曹操')

List 与 Tuple 的区别

功能说明 列表 元组
元素操作 可变 不可变
迭代耗时 耗时多 相对较快
操作修改 执行插入、删除、追加操作 仅限访问元素
内存消耗 消耗内存多 消耗内存少
内置方法 内置方法多 内置方法少
容错概率 易发生变化和错误 难发生

到此这篇关于一文搞懂Python中列表List和元组Tuple的使用的文章就介绍到这了,更多相关Python列表 元组内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python数据结构之列表与元组详解

    目录 Python 列表(list): 1.序列介绍: 2.列表的概述: 3.创建一个列表 4.列表的索引 5.列表的分片 6.列表的分片赋值 7.循环遍历列表 8.查找元素与计数 9.列表增加元素: 10.列表删除元素: 11.列表排序 Python 元组(tuple): 1.为什么要将元组设计成为不可变序列 2.创建元组 3.元组的遍历 4.元组的内置函数 Python 列表(list): 1.序列介绍:   序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置

  • python学习笔记之列表(list)与元组(tuple)详解

    前言 最近重新再看python的基础知识,感觉自己还是对于这些知识很陌生,需要用的时候还是需要翻书查阅,还是先注重基础吧--我要重新把python的教程阅读一遍,把以前自己忽略的部分学习,加强练习和记忆. 现在读到了列表(list).元组(tuple).集合(set)和字典(dict)四种在python内置的重要的数据结构.我只是想记录一下列表(list)和元组(tuple)比较容易搞混的地方和阐述一遍列表(list)和元组(tuple)比较常用的一些方法. 列表(list)与元组(tuple)

  • python中列表(list)和元组(tuple)的深入讲解

    前言 在我们实际开发中,经常需要将一组数据存储起来,以便使用.如果学习了其他的语言可能知道数组(Array)这个数据结构,它就可以将多个数据进行存储,访问数据可以通过数组下标的方式,的进行获取.如果你是python开发者,那么可以使用更加灵活的列表(list)和元组(tuple),来进行数据储存.下面我们先简单了解下列表和元组的基本使用. 列表 列表是动态的,长度可以改变,可以随意增加,修改或删除元素. 初始化列表 a = list() b = [] # 可以通过range快速创建list c

  • python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用

    在抓取网络数据的时候,有时会用正则对结构化的数据进行提取,比如 href="https://www.1234.com"等.python的re模块的findall()函数会返回一个所有匹配到的内容的列表,在将数据存入数据库时,列表数据类型是不被允许的,而是需要将其转换为元组形式.下面看下,str/list/tuple三者之间怎么相互转换. class forDatas: def __init__(self): pass def str_list_tuple(self): s = 'abc

  • Python使用list列表和tuple元组的方法

    list: Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出寝室所有室友的名字,就可以用一个list表示: roomie = ['xzl','xsy','pp'] len(roomie) 用len()函数可以获得list元素的个数: 用索引来访问list中每一个位置的元素,记得索引和数组一样是从0开始的: 当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界. 值得注意的是:如果要取最后一个

  • 一文搞懂Python中列表List和元组Tuple的使用

    目录 列表 List 列表是有序的 列表可以包含任意对象 通过索引访问列表元素 列表嵌套 列表可变 元组 Tuple 定义和使用元组 元素对比列表的优点 元组分配.打包和解包 List 与 Tuple 的区别 列表 List 列表是任意对象的集合,在 Python 中通过逗号分隔的对象序列括在方括号 ( [] ) 中 people_list = ['曹操', '曹丕', '甄姫', '蔡文姫'] print(people_list) ['曹操', '曹丕', '甄姫', '蔡文姫'] peopl

  • 一文搞懂Python中Pandas数据合并

    目录 1.concat() 主要参数 示例 2.merge() 参数 示例 3.append() 参数 示例 4.join() 示例 数据合并是数据处理过程中的必经环节,pandas作为数据分析的利器,提供了四种常用的数据合并方式,让我们看看如何使用这些方法吧! 1.concat() concat() 可用于两个及多个 DataFrame 间行/列方向进行内联或外联拼接操作,默认对行(沿 y 轴)取并集. 使用方式 pd.concat( objs: Union[Iterable[~FrameOr

  • 一文搞懂Python中的进程,线程和协程

    目录 1.什么是并发编程 2.进程与多进程 3.线程与多线程 4.协程与多协程 5.总结 1.什么是并发编程 并发编程是实现多任务协同处理,改善系统性能的方式.Python中实现并发编程主要依靠 进程(Process):进程是计算机中的程序关于某数据集合的一次运行实例,是操作系统进行资源分配的最小单位 线程(Thread):线程被包含在进程之中,是操作系统进行程序调度执行的最小单位 协程(Coroutine):协程是用户态执行的轻量级编程模型,由单一线程内部发出控制信号进行调度 直接上一张图看看

  • 一文搞懂Python中subprocess模块的使用

    目录 简介 常用方法和接口 subprocess.run()解析 subprocess.Popen()解析 Popen 对象方法 subprocess.run()案例 subprocess.call()案例 subprocess.check_call()案例 subprocess.getstatusoutput()案例 subprocess.getoutput()案例 subprocess.check_output()案例 subprocess.Popen()综合案例 简介 subprocess

  • 一文搞懂Python中is和==的区别

    目录 ==比较操作符和is同一性运算符区别 哪些情况下is和==结果是完全相同的? 为什么256时相同, 而1000时不同? 结论 ==比较操作符和is同一性运算符区别 哪些情况下is和==结果是完全相同的? 结论 在Python中一切都是对象. Python中对象包含的三个基本要素,分别是:id(身份标识).type(数据类型)和value(值).对象之间比较是否相等可以用==,也可以用is. is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同.下面来看看具体区别在哪? i

  • 一文搞懂Python中pandas透视表pivot_table功能详解

    目录 一.概述 1.1 什么是透视表? 1.2 为什么要使用pivot_table? 二.如何使用pivot_table 2.1 读取数据 2.2Index 2.3Values 2.4Aggfunc 2.5Columns 一文看懂pandas的透视表pivot_table 一.概述 1.1 什么是透视表? 透视表是一种可以对数据动态排布并且分类汇总的表格格式.或许大多数人都在Excel使用过数据透视表,也体会到它的强大功能,而在pandas中它被称作pivot_table. 1.2 为什么要使用

  • 一文搞懂Python中pandas透视表pivot_table功能

    目录 一.概述 1.1 什么是透视表? 1.2 为什么要使用pivot_table? 二.如何使用pivot_table 2.1 读取数据 2.2Index 2.3Values 2.4Aggfunc 2.5Columns 一文看懂pandas的透视表pivot_table 一.概述 1.1 什么是透视表? 透视表是一种可以对数据动态排布并且分类汇总的表格格式.或许大多数人都在Excel使用过数据透视表,也体会到它的强大功能,而在pandas中它被称作pivot_table. 1.2 为什么要使用

  • 一文搞懂python 中的迭代器和生成器

    可迭代对象和迭代器 迭代(iterate)意味着重复,就像 for 循环迭代序列和字典那样,但实际上也可使用 for 循环迭代其他对象:实现了方法 __iter__ 的对象(迭代器协议的基础).__iter__方法返回一个迭代器,它是包含方法 __next__ 的对象,调用时可不提供任何参数:当你调用 __next__ 时,迭代器应返回其下一个值:如果没有可供返回的值,应引发 StopIteration 异常:也可使用内置函数 next(),此种情况下,next(it) 与 it.__next(

  • 一文带你搞懂Python中的文件操作

    目录 一.文件的编码 二.文件的读取 2.1 open()打开函数 2.2 mode常用的三种基础访问模式 2.3 读操作相关方法 三.文件的写入 写操作快速入门 四.文件的追加 追加写入操作快速入门 五.文件操作综合案例 一.文件的编码 计算机中有许多可用编码: UTF-8 GBK Big5 等 UTF-8是目前全球通用的编码格式 除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可. 二.文件的读取 2.1 open()打开函数 注意:此时的f是open函数的文件对象,对象是Pytho

随机推荐