【Python】列表和元组

简介: 【Python】列表和元组

概念

变量就是内存空间,用来表示/存储数据

如果表示的数据少,直接定义几个变量就行了

num1
num2
num3

但有时候要表示的数据比较多

Python 中,列表和元组就是一种可以用一个变量来表示很多数据的机制(类似其他语言中的数组

列表和元组,大部分功能都是差不多的,但是有一个功能有非常明显的区别:

  • 列表是可变的,创建好了之后,随时可以改
  • 元组是不可变的,创建好了之后改不了,若想改,只能丢弃旧的,再创建一个新的

列表就是买散装辣条,装好了袋子之后,随时可以把袋子打开,再往里多加辣条或者拿出去一些辣条

元组就是买包装辣条,厂家生产好了辣条之后,一包就是固定的这么多,不能变动了

创建列表

  1. 直接使用字面值来创建
a = [1, 2, 3, 4]
print(type(a))
print(a)
"""
运行结果
<class 'list'>
[1, 2, 3, 4]
"""
  • []就代表一个空的列表
  • 可以在 [] 中指定列表的初始值,
  1. 使用 list() 来创建
b = list()
print(type(b))
"""
运行结果
<class 'list'>
"""

C++/Java 中要求一个数组里只能存放相同的变量,但在 Python 中没有类型要求

a = [1, 'hello', True, [1, 2, 3]]  
print(a)
"""
运行结果
[1, 'hello', True, [1, 2, 3]]
"""

访问下标

通过下标访问的方式,来获取列表中的元素

[] 放到一个列表变量的后面,同时 [] 中写上一个整数,此时他就是下标访问运算符。[] 中间写的这个证书,就称为“下标”或者“索引

a = [1, 2, 3, 4]
print(a[2])
"""
运行结果
3
"""
  • Python 中的下标,是从 0 开始计数的

通过下标来修改列表元素

a = [1, 2, 3, 4]
a[2] = 100
print(a)
"""
运行结果
[1, 2, 100, 4]
"""
  • 这是列表的功能,如果是元组的话,就只能读,不能改

由于下标是从 0 开始计算的,那么对于列表来说,下标的有效范围是 0~长度-1。当我们的下标超出有效范围的时候,尝试访问就会报错 `


获取列表长度

a = [1, 2, 3, 4]
print(len(a))
"""
运行结果
4
"""
  • len 可以穿字符串、列表、元组、字典、自定义得嘞…(动态类型)

下标可以写成负数

a = [1, 2, 3, 4]
print(a[lem(a)-1])
print(a[-1])
"""
运行结果
3
3
"""
  • -1 就等价与 len(a) - 1

切片操作

切片操作是一个比较高效的操作,进行切片的时候,只是取出原有列表中的一个部分,并不涉及到“数据的拷贝”。假设有一个很大的列表进行切片,切片的范围也很大,即使如此,切片操作仍然非常高效

切片操作中,[] 中有两个数字,表示了一段区间

a = [1, 2, 3, 4]
print(a[1:3])
"""
运行结果
[2, 3]
"""
  • 1 表示开始区间的下标;3 表示结束区间的下标
  • 包含 1,不包含 3[1, 3)

省略后边界

a = [1, 2, 3, 4]
print(a[1:])
"""
运行结果
[2, 3, 4]
"""
  • a[1] 开始,一直读取到整个列表结束

省略前边界

a = [1, 2, 3, 4]
print(a[:2])
"""
运行结果
[1, 2]
"""
  • 从列表的 a[0] 开始读,一直读到结束的后边界

省略前后边界

a = [1, 2, 3, 4]
print(a[:])
"""
运行结果
[1, 2, 3, 4]
"""
  • 省略前后边界就是打印整个列表

带有步长的切片

切片操作,还可以指定“步长”,range

a = [1, 2, 3, 4 ,5 , 6, 7 ,8]
print(a[::1])
print(a[::2])
"""
运行结果
[1, 2, 3, 4 ,5 , 6, 7 ,8]
[1, 3, 5, 7]
"""
  • 多加一个:,再多加一个数字,这个数字就是步长
  • 这里表示:每隔两个元素,取一个列表元素
  • 步长也可以设置为负数,当步长为负数时,意思是从后往前来取元素

遍历列表元素

遍历” 指的是把元素一个一个的取出来,再分别进行处理

使用 for 循环

a = [1, 2, 3, 4, 5]  
for elem in a:  
    print(elem)
  • 在这个遍历过程中,循环里面的逻辑不一定是打印,还可以是别的
  • elem 代表列表里的每个元素
  • for in后面的这个东西,要求是一个可迭代对象
  • 列表就是一个可迭代对象

使用 for 循环访问下标的方式

a = [1, 2, 3, 4, 5]
for i range(0, len(a)):
  print(a[i])
  • 相比于上面的方式,这里不仅可以打印,还可以进行修改

使用 while 循环

a = [1, 2, 3, 4, 5]
i = 0
while i < len(a):
  print(a[i])
  i += 1

新增元素

在末尾新增

使用 append 往列表末尾新增一个元素

a = [1, 2, 3, 4, 5]  
a.append(77)  
a.append('hello')  
print(a)
"""
运行结果
[1, 2, 3, 4, 5, 77, 'hello']
"""
  • 此处的append是搭配列表对象 a 一起使用的,而不是作为一个独立的函数
  • typeprintinputlen… 都是独立的函数
  • 这种要搭配对象来使用的函数function)也叫做方法method
  • 在 Python 中,对象就可以视为“变量

在任意位置新增

可以使用 insert 方法,让列表的任意位置来新增元素

a = [1, 2, 3, 4, 5]
a.insert(1, 'hello')
print(a)
"""
运行结果
[1, 'hello', 2, 3, 4, 5]
"""
  • a[1] 的位置新增 ’ hello ’ 字符串
  • 如果输入的 index 超过列表的长度,那就直接放在末尾

查找元素

判定元素是否存在

a = [1, 2, 3, 4]
print(1 in a)
print(10 in a)
print(1 not in a)
print(10 not in a)
"""
运行结果
True
False
False
True
"""
  • 使用 in 来判定某个元素是否在列表中存在
  • 使用 not in 来判断某个元素在列表中是否不存在

判定元素的位置

a = [1, 2, 3, 4]
print(a.index(2))
"""
运行结果
1
"""
  • 使用 index 方法,来判定当前元素在列表中的位置,得到一个下标
  • 找不到的时候就会直接报出异常

删除元素

删除列表末尾元素

a = [1, 2, 3, 4]  
a.pop()  
print(a)
"""
运行结果
[1, 2, 3]
"""
  • 使用 pop 方法,删除列表中最末尾的元素

删除任意位置元素

a = [1, 2, 3, 4]  
a.pop(1)  
print(a)
"""
运行结果
[1, 3, 4]
"""
  • 使用 pop 方法删除任意位置元素,pop 参数可以传一个下标过去

按照值进行删除

不需要知道下标是什么,只需要知道要删除的值是什么就可以了

a = ['aa', 'bb', 'cc', 'dd']  
a.remove('cc')  
print(a)
"""
运行结果
['aa', 'bb', 'dd']
"""

列表拼接

使用“+”拼接

使用 + 能够把两个列表拼接在一起

a = [1, 2, 3, 4]  
b = [5, 6, 7, 8]  
c = a + b  
d = b + a
print(c)  
print(d)
"""
运行结果
[1, 2, 3, 4, 5, 6, 7, 8]
[5, 6, 7, 8, 1, 2, 3, 4]
"""
  • 使用 + 拼接列表的时候,只是针对当前列表的内容生成了一个更大的新的列表
  • 原有列表的内容是不变的

使用 extend 进行拼接

a = [1, 2, 3, 4]  
b = [5, 6, 7, 8]  
c = a.extend(b)  
print(a)  
print(b)  
print(c)
"""
运行结果
[1, 2, 3, 4, 5, 6, 7, 8]
[5, 6, 7, 8]
None
"""
  • 这个拼接是把最后一个列表的内容拼接到前一个列表里面
  • None是一个特殊的变量值,表示什么都没有
  • extend 方法,其实是没有返回值的,拿一个变量来接收一个没有返回值的方法的返回值
  • 谁使用 extend 方法,就拼在谁的后面

使用“+=”拼接

a = [1, 2, 3, 4]  
b = [5, 6, 7, 8]  
a += b 
print(a)  
print(b)  
"""
运行结果
[1, 2, 3, 4, 5, 6, 7, 8]
[5, 6, 7, 8]
"""
  • extend 的效果是类似的
  • 但执行过程是不一样的
  • a += b 等价于 a = a + b;又创建了一个大列表,然后将小的装进去,再将大列表的值赋给 a 里面,最后将 a 的旧值释放
  • a.extend(b) 则是直接把 b 的内容拼到了 a 的后面,更高效,省去了数据拷贝和释放的过程

关于元组

创建元组

a = ()
b = tuple()
print(type(a))
print(type(b))
"""
运行结果
<class 'tuple'>
<class 'tuple'>
"""

创建元组时指定初始值

a = (1, 2, 3, 4)
print(a)
"""
运行结果
(1, 2, 3, 4)
"""

元组中的元素可以使任意类型

a = (1, 2, 'hello', True, [])
print(a)
"""
运行结果
(1, 2, 'hello', True, [])
"""

通过下标进行访问

a = (1, 2, 3, 4, 5)
print(a[1])
print(a[-1])
"""
运行结果
2
5
"""
  • 下标也是从 0 开始,len-1 结束
  • 当访问的下标超过 len - 1,会报错

切片

通过切片来获取元组中的一个部分

a = (1, 2, 3, 4)
print(a[1:3])
  • 这里的操作和列表是一摸一样的

遍历元组

a = (1, 2, 3, 4)
for elem in a:
  print(elem)
  • 和前面列表操作一样

查找元素

a = (1, 2, 3, 4, 5)
print(3 in a)
print(22 in a)
  • 和列表的操作一样

拼接元组

a = (1, 2, 3)
b = (4, 5, 6)
print(a + b)
  • 和列表的操作一样

为什么要有元组

在协同开发的时候,一个程序员 A 实现一些功能,提供给程序员 B 使用。A 写好一些函数,让 B 去调用

期间函数肯定要传参

B 在传参的时候就可能会纠结一个问题“我把我的参数传过去了,A 的函数里面是否会把我的参数的内容给改了呢”,如果使用元组作为参数,就可以避免这样的纠结

元组不可修改==>不可变对象

不可变对象,是可以哈希的


目录
打赏
0
0
0
0
17
分享
相关文章
[oeasy]python089_列表_删除列表项_remove_列表长度_len
本文介绍了Python列表(list)的操作方法,重点讲解了`remove`方法的使用。通过实例演示如何删除列表中的元素,探讨了`ValueError`异常产生的原因,并分析了时间复杂度O(n)的概念。同时提及了`clear`方法清空列表的功能及`len`函数获取列表长度的用法。最后以购物清单为例,展示列表的实际应用场景,并预告快速生成列表的方法将在后续内容中介绍。
108 62
[oeasy]python091_列表_索引_index_中括号_索引函数
本文介绍了Python中列表与字符串的索引及index函数用法。通过range生成列表,使用索引[]访问和修改列表元素,index函数查找元素位置。字符串支持索引访问但不可直接修改。还探讨了16进制数在Python中的表示方法,以及日期、月份等特殊字符的Unicode范围。最后总结了列表与字符串操作的区别,并预告后续内容,提供蓝桥云课、GitHub和Gitee链接供进一步学习。
40 21
|
6天前
|
[oeasy]python090_列表_构造_范围_range_start_end_step_步长
本文介绍了Python中列表的生成方法,重点讲解了`range()`函数的使用。通过`range(start, stop, step)`可生成一系列整数,支持正负步长,但不支持小数参数。文章从基础的列表追加、直接赋值到复杂的应用场景(如生成等宽字体的月份列表),结合实例演示了`range()`的灵活性与实用性。最后总结了`range()`的关键特性:前闭后开、支持负数步长,并提供了进一步学习的资源链接。
41 14
[oeasy]python088_列表_清空列表_clear
本文介绍了Python中列表的清空方法`clear`。通过实例讲解了`clear`与将列表赋值为空列表的区别,前者会清空原列表内容,而后者创建新空列表,不影响原列表。文中以收银程序为例,展示了`clear`的实际应用场景,并通过地址观察解释了两者的机制差异。最后总结了相关术语如`list`、`append`、`clear`等,帮助理解列表操作及方法调用的概念。
40 6
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
Python数据结构:列表、元组、字典、集合
Python 中的列表、元组、字典和集合是常用数据结构。列表(List)是有序可变集合,支持增删改查操作;元组(Tuple)与列表类似但不可变,适合存储固定数据;字典(Dictionary)以键值对形式存储,无序可变,便于快速查找和修改;集合(Set)为无序不重复集合,支持高效集合运算如并集、交集等。根据需求选择合适的数据结构,可提升代码效率与可读性。
深入探讨 Python 列表与元组:操作技巧、性能特性与适用场景
Python 列表和元组是两种强大且常用的数据结构,各自具有独特的特性和适用场景。通过对它们的深入理解和熟练应用,可以显著提高编程效率和代码质量。无论是在数据处理、函数参数传递还是多线程环境中,合理选择和使用列表与元组都能够使得代码更加简洁、高效和安全。
78 9
[oeasy]python069_当前作用域都有些什么_列表dir_函数_builtins
本文介绍了Python中`dir()`函数的使用方法及其作用。`dir()`可以列出当前作用域内的所有变量和成员,类似于`locals()`,但`dir()`不仅限于本地变量,还能显示模块中的所有成员。通过`dir(__builtins__)`可以查看内建模块中的所有内建函数,如`print`、`ord`、`chr`等。此外,还回顾了`try-except-finally`结构在数据库连接中的应用,并解释了为何`print`函数可以直接使用而无需导入,因为它位于`__builtins__`模块中。最后,简要提及了删除`__builtins__.print`的方法及其影响。
58 0
|
4月前
|
Python列表
Python列表。
76 8
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
89 9

热门文章

最新文章