首页 > 编程语言 >Python数据容器(3)--遍历与列表生成式

Python数据容器(3)--遍历与列表生成式

时间:2024-07-14 11:57:06浏览次数:11  
标签:10 遍历 Python 生成式 列表 -- num 元组

文章目录

遍历

在Python中,遍历(Traversal)是指按顺序访问数据结构(如列表、元组、字典、集合或字符串等)中的每一个元素,并对它们执行某种操作的过程。Python提供了多种遍历数据结构的方法,包括使用for循环、while循环、列表推导式、生成器表达式以及迭代器等。但最常见和直接的遍历方式是使用for循环。

那么接下来我们来介绍一下数据容器的遍历:

直接遍历

nun_list = [1,5,6.7,10,19,27]
#遍历列表
for i in nun_list:
    print(i,end=" ")
#本身不输入end="",输出结果本身具有换行"\n"效果,改变end中的输入就会取代"\n"换行效果
    #比如输入空格,输出之间插入空格
------------------------------
输出结果:
1 5 6.7 10 19 27

索引遍历

有序的数据容器才可以使用索引遍历,比如list列表、tuple元组

list列表

#列表
nun_list = [1,5,6.7,10,19,27]
for i in range(len(nun_list)):		#取出列表的长度,在长度范围内遍历循环,否则会索引越界哦
    print(nun_list[i])
------------------------------
输出结果:
1
5
6.7
10
19
27

tuple元组

num_tuple = (12,15,23,34,47,56)
#元组
for i in range(len(num_tuple)):		#取出元组的长度,在长度范围内遍历循环,否则会索引越界哦
    print(num_tuple[i])
-----------------------------
输出结果:
12
15
23
34
47
56

字典遍历

列表和元组可以通过索引遍历,那么字典如何遍历呢?

get()方法

通过找到健(key)来获取值(value)。而get()方法可以通过健获取值。

num_dict = {1:2,5:9,"a":"b",(1,2):[6,7]}
#字典的遍历
for k in num_dict.keys():	#遍历字典的健
    print(k,num_dict.get(k))	#通过健得到值将它输出
--------------------------
输出结果:
1 2
5 9
a b
(1, 2) [6, 7]

items()方法

字典的items()方法是一个非常有用的功能,它返回字典中所有(键,值)对的视图对象,这个视图对象显示字典中的每一项。

num_dict = {1:2,5:9,"a":"b",(1,2):[6,7]}
# 通过items返回的二元组去接收返回值 然后用两个变量去接收二元组内的值
for k,v in num_dict.items():
    print(k,v)
-------------------------------
1 2
5 9
a b
(1, 2) [6, 7]

enumerate()函数与zip()函数

针对元组和列表!!

enumerate()函数

在Python中,enumerate()函数函数是一个非常有用的内置函数,它用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。这意味着,通过enumerate()函数,你可以获取到每个元素的索引(或位置)以及该元素的值。

故此,我们可以通过enumerate()函数来进行遍历操作,并且能将可遍历的数据对象的索引位置和对应元素同时取出:

num_tuple = (12,15,23,34,47,56)
# 元组和列表,因为索引
# 同时取出 列表或元组的 索引和值
for ind,val in enumerate(num_tuple):
    print(ind,val)
---------------------------
输出结果:
0 12
1 15
2 23
3 34
4 47
5 56

zip()函数

可将列表和元组同时遍历输出。

nun_list = [1,5,6.7,10,19,27]
num_tuple = (12,15,23,34,47,56)
# 同时遍历列表和元组
for li,tup in zip(nun_list,num_tuple):
    print(li,tup)
----------------------------
输出结果:
1 12
5 15
6.7 23
10 34
19 47
27 56

列表生成式

在Python中,列表生成式(List Comprehension)是一种简洁而强大的方式来创建列表。它允许你从已有的列表或任何可迭代对象中通过表达式来生成新的列表。列表生成式比使用循环(如for循环)来生成列表的代码更加简洁易读。

语法表现形式

[expression for item in iterable]

或者,带有条件的列表生成式:

[expression for item in iterable if condition]

这里,expression是对 iterable (可迭代对象,如列表、元组、字符串、集合等)中的每个item执行的表达式,其结果将被用于生成新的列表。

编写

我们来尝试编写下面几个内容:

基本的列表生成式

  1. 正常我们如何生成一个十以内的列表呢?可以通过for循环遍历得到的对吧,比如:
a = []	#定义一个空列表
for i in range(10):		#遍历0~10的数字,左闭右开哦
    a.append(i)	#将遍历得到的值放进列表中存放、
print(a)
-------------------------
输出结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

那么这样的列表我们如何通过列表生成式生成呢?记住:

“expression是对 iterable (可迭代对象,如列表、元组、字符串、集合等)中的每个item执行的表达式”

编写:

[expression for item in iterable]
b = [i for i in range(10)]
print(b)
-------------
输出结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

带有条件的列表生成式

  1. 生成10以内的偶数

先用for循环遍历生成列表试试:

c = []
for i in range(10):
    if i % 2 == 0:
        c.append(i)
print(c)
---------------------
输出结果:
[0, 2, 4, 6, 8]

如何将上述的代码用列表生成式表示呢?

[expression for item in iterable if condition]
d = [i for i in range(10) if i % 2 == 0]
print(d)
-------------
输出结果:
[0, 2, 4, 6, 8]

嵌套列表生成式

接下来我们尝试一个复杂的:

字符串与列表之间的转换

在编写之前呢,我们先了解一下,字符串与列表之间的转换:

# 字符串和列表之间的转换
strs = "abcd"
str_list = list(strs)
print(list(strs))

# 字符列表怎么转成一个字符串
#join() 方法是一个字符串方法,用于将序列中的元素以指定的字符连接生成一个新的字符串。
print("\n".join(str_list))
--------------------------------
输出结果:
['a', 'b', 'c', 'd']
a
b
c
d

接下来让我们试试:

  1. 生成99乘法表

我们还是先用正常方法编写:

# 生成99乘法表
nine = []
for i in range(1,10):
    num = []
    for j in range(1,i+1):
        num.append(f"{i} * {j} = {i * j}")		# 在Python中,f""是一种在字符串中嵌入表达式的简便方式。
												# 它允许你在字符串中直接包含变量的值或表达式的结果
    nine.append(num)
print(nine)

输出结果:

[['1 * 1 = 1'], ['2 * 1 = 2', '2 * 2 = 4'], ['3 * 1 = 3', '3 * 2 = 6', '3 * 3 = 9'], ['4 * 1 = 4', '4 * 2 = 8', '4 * 3 = 12', '4 * 4 = 16'], ['5 * 1 = 5', '5 * 2 = 10', '5 * 3 = 15', '5 * 4 = 20', '5 * 5 = 25'], ['6 * 1 = 6', '6 * 2 = 12', '6 * 3 = 18', '6 * 4 = 24', '6 * 5 = 30', '6 * 6 = 36'], ['7 * 1 = 7', '7 * 2 = 14', '7 * 3 = 21', '7 * 4 = 28', '7 * 5 = 35', '7 * 6 = 42', '7 * 7 = 49'], ['8 * 1 = 8', '8 * 2 = 16', '8 * 3 = 24', '8 * 4 = 32', '8 * 5 = 40', '8 * 6 = 48', '8 * 7 = 56', '8 * 8 = 64'], ['9 * 1 = 9', '9 * 2 = 18', '9 * 3 = 27', '9 * 4 = 36', '9 * 5 = 45', '9 * 6 = 54', '9 * 7 = 63', '9 * 8 = 72', '9 * 9 = 81']]

哦吼,我们发现这有两个for循环在里面,这该怎么转成列表生成式呢?

我们一步一步来,先将里面的for循环转成列表生成式:

nine = []
for i in range(1, 10):
    num = [f"{i} * {j} = {i * j}" for j in range(1, i + 1)]
    nine.append("\t".join(num))
print(nine)

接下来我们再将外面的for循环转成列表生成式:

ninenine = "\n".join(["\t".join([f"{j} * {i} = {i * j}" for j in range(1, i + 1)]) for i in range(1, 10)])
#上述代码实现输出很乱,我们进行一下优化
#转义字符.join()实现换行和制表,使输出结果优化完美
print(ninenine)		

输出结果:

1 * 1 = 1
1 * 2 = 2	2 * 2 = 4
1 * 3 = 3	2 * 3 = 6	3 * 3 = 9
1 * 4 = 4	2 * 4 = 8	3 * 4 = 12	4 * 4 = 16
1 * 5 = 5	2 * 5 = 10	3 * 5 = 15	4 * 5 = 20	5 * 5 = 25
1 * 6 = 6	2 * 6 = 12	3 * 6 = 18	4 * 6 = 24	5 * 6 = 30	6 * 6 = 36
1 * 7 = 7	2 * 7 = 14	3 * 7 = 21	4 * 7 = 28	5 * 7 = 35	6 * 7 = 42	7 * 7 = 49
1 * 8 = 8	2 * 8 = 16	3 * 8 = 24	4 * 8 = 32	5 * 8 = 40	6 * 8 = 48	7 * 8 = 56	8 * 8 = 64
1 * 9 = 9	2 * 9 = 18	3 * 9 = 27	4 * 9 = 36	5 * 9 = 45	6 * 9 = 54	7 * 9 = 63	8 * 9 = 72	9 * 9 = 81

总结

本篇我们介绍了:

遍历:

  1. 直接遍历
  2. 针对有序的list列表和tuple元组的索引遍历,以及enumerate()函数与zip()函数
    1. enumerate()函数:将遍历对象的索引位置和对应的元素同时遍历出来
    2. zip()函数:同时遍历列表和元组
  3. 字典遍历时使用的get()方法和items()方法
    1. get()方法:通过找到健(key)来获取值(value)
    2. items()方法:通过items返回的二元组去接收返回值 然后用两个变量去接收二元组内的值

列表生成式

  1. 基本的列表生成式:表现形式:
[expression for item in iterable]
  1. 带有条件的列表生成式、嵌套列表生成式:表现形式:
[expression for item in iterable if condition]
  1. 字符串与列表之间的转换:字符列表转成一个字符串使用join()方法。

标签:10,遍历,Python,生成式,列表,--,num,元组
From: https://blog.csdn.net/m0_74896766/article/details/140408468

相关文章

  • 一些额外功能的铺垫
    publicclassHealth:MonoBehaviour{  publicAnimator[]healthItem;  publicAnimatorgeo;  //Startiscalledbeforethefirstframeupdate  voidStart()  { 。  }  //Updateiscalledonceperframe  publicvoid......
  • lgP4513 小白逛公园
    有n个公园,小白对第i个公园的评分为A[i],有m次操作:1ab表示在[a,b]范围内选择一段连续的公园遛狗;2ab表示小白对公园a的评分修改为b;对于操作1,输出可以取得的最大评分。分析:线段树维护区间子段和。#include<bits/stdc++.h>usingllong=longlong;constintinf=1e......
  • 概率论原理精解【1】
    文章目录测度概述集类笛卡尔积定义例子多集合的笛卡尔积定义计算方法注意事项有限笛卡尔积的性质1.定义2.性质2.1基数性质2.2空集性质2.3不满足交换律2.4不满足结合律2.5对并和交运算满足分配律3.示例4.结论参考链接测度概述所谓测度,通俗的讲就是测量......
  • [0079]基于JAVA的专线物流智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的专线物流智慧管理系统的设计与实现指导老师(一)选题的背景和意义随着信息技术的发展和互联网的普及,物流行业正面临着一场深刻的变革。传统的物流管理模式已经无法满足现代企业的需求,因此开发一......
  • u盘里文件损坏无法打开怎么恢复?五种方法恢复数据,就这么简单
    有时可能会遇到:插入U盘后,发现里面的文件损坏无法打开,有多种方法可以尝试来恢复损坏的文件。本文将介绍常见的方法解决U盘文件损坏无法打开的问题。演示环境:荣耀MagicBook16Pro,Windows111.使用文件修复工具许多文件修复工具可以修复损坏文件。这些工具能够检测并修复文......
  • 音视频开发—使用FFmpeg从纯H264码流中提取图片 C语言实现
    文章目录1.H264码流文件解码流程关键流程详细解码流程详细步骤解析2.JPEG编码流程详细编码流程详细步骤解析3.完整示例代码4.效果展示从纯H.264码流中提取图片的过程包括解码和JPEG编码两个主要步骤,以下是详细阐述1.H264码流文件解码流程关键流程查找编解码器......
  • 数据结构与算法分析实验7 构造哈夫曼树和生成哈夫曼编码
    文章目录1.上机名称2.上机要求3.上机环境4.程序清单(写明运行结果及结果分析)4.1程序清单4.1.1head.h头文件内容如下:4.1.2head.cpp实现文件内容如下:4.1.3源文件main.cpp内容如下:4.2程序运行结果5.上机体会1.上机名称构造哈夫曼树和生成哈夫曼编码2.上机......
  • python接口自动化(二十五)--unittest断言——下(详解)
    1.简介 本篇还是回归到我们最初始的话题,想必大家都忘记了,没关系看这里:传送门 没错最初的话题就是登录,由于博客园的登录机制改变了,本篇以我找到的开源免费的登录API为案例,结合unittest框架写2个用例。同样我们先来看一下接口文档。2.接口文档2.1登录接口请求方式......
  • Java NIO SocketChannel
    JavaNIOSocketChannel用于将通道与TCP(传输控制协议)网络套接字连接。它相当于网络编程中使用的Java网络套接字(Socket)。JavaNIO中有两种可用于创建SocketChannel的方法:当传入连接到达ServerSocketChannel时,可以创建它。打开一个SocketChannel,并在网络上与服务器连接。......
  • Java NIO管道
    JavaNIO管道用于在两个线程之间建立单向数据连接。它有一个槽通道和源通道。数据正在写入槽通道,然后可以从源通道读取该数据。在JavaNIO中,包java.nio.channel.pipe用于按顺序读取和写入数据。管道用于确保数据必须以写入管道的相同顺序读取。下面来看看管道工作原理的示意......