# 【Python】列表生成式中的八重境界

## 2. Level1: 基础用法

[En]

The simplest list generation formula is as follows:

a = [1, 2, 3]b = [n*2 for n in a]# b = [2, 4, 6]


[En]

The above code implements the operation of squaring a single element in the list.

## 3. Level2: 加入条件语句

a = [1, 2, 3, 4, 5]b = [n for n in a if n<4]# b = [1, 2, 3]


## 4. Level3: 加入 enumerate()

a = ["apple", "orange", "pear"]b = [(i,fruit) for i,fruit in enumerate(b)]# b is [(0,"apple"), (1,"orange"), (2,"pear")]


## 5. Level4: 加入 zip()

a = ["apple", "orange", "pear"]a2 = ["pie", "juice", "cake"]b = [i+j for i,j in zip(a, a2)]# b is ["applepie", "orangejuice", "pearcake"]


## 6. Level5: 加入三目运算符

[En]

The ternary operator can also be used in list generation, as shown in the following example:

a = [56, 45, 76, 23]b = [("pass" if n>=50 else "fail") for n in a]# b is ["pass", "fail", "pass", "fail"]


## 7. Level6: 嵌套循环

[En]

In fact, of course, we can also use nested loops in list generation. Let’s look at an example, as follows:

a = [10, 20, 30]a2 = [1, 2, 3]b = [i+j for i in a for j in a2]# b is [11, 12, 13, 21, 22, 23, 31, 32, 33]


[En]

In essence, the equivalent code for the above implementation is as follows:

newlist = []for i in a:    for j in a2:        newlist.append( i+j )


## 8. Level7: 嵌套列表生成式

[En]

At a more advanced level, we can nest list generators in list generators, as an example:

a = [1, 2, 3]b = [[i for i in range(1, n+1)] for n in a]# b is [[1], [1, 2], [1, 2, 3]]


## 9. Level8: 合并上述所有技巧

[En]

Finally, let’s combine the techniques described above. Let’s take a look at the following examples:

a = [1, 2, 3, 4, 5]b = [[xx if xx>yy else yy for xx in range(x) for yy in range(y)] for i,(x,y) in enumerate(zip(a, a[::-1]))    if i%2==0]# [[0, 1, 2, 3, 4], [0, 1, 2, 1, 1, 2, 2, 2, 2], [0, 1, 2, 3, 4]]


[En]

The above implementation doesn’t make much sense, and we try to apply all the techniques described above, but after all, the code is too readable. The main purpose is to show that we can combine a variety of techniques to make our list generation more powerful.

## 10. 应用栗子

[En]

All right, let’s look at a practical application example! Suppose we have the following student information in our class:

students = [    ("bob", "m", [67, 89, 60]),    ("alice", "f", [97, 85, 61]),    ("cassie", "f", [78, 91, 89]),    ("tim", "m", [47, 57, 24]),    ("tom", "m", [91, 79, 72]),]


[En]

The above list shows the name, gender and test scores of each student, assuming that if a student has an average score of ≥ 50, then the student is eligible to win the prize. Here we need to write code to find the boys in the above list who are eligible for the award. The sample code is as follows:

x = [(name, "eligible" if sum(scores)/len(scores) >=50 else "not eligible") \     for name,gender,scores in students if gender=="m"]#[('bob', 'eligible'), ('tim', 'not eligible'), ('tom', 'eligible')]


## 11. 总结

Original: https://blog.51cto.com/u_15506603/5642551
Author: sgzqc
Title: 【Python】列表生成式中的八重境界

(0)

### 大家都在看

• #### CSS 网格 Gird 布局

通过将属性 display 的值设为 grid，HTML 元素就可以变为网格容器。 注意： 在 CSS 网格中，父元素称为容器（container），它的子元素称为项（items）…

Python 2023年6月9日
0112
• #### 数据库实验3 完整性语言实验

实验3 完整性语言实验 实验3.1实体完整性实验 1.实验目的 掌握实体完整性的定义和维护方法。 2.实验内容和要求 定义实体完整性,删除实体完整性。能够写出两种方式定义实体完整性…

Python 2023年10月9日
054
• #### Python–matplotlib绘图

绘制一个最简单的折线图 现在绘制一个简单的二维折线图，按如下代码画出折线图： -*- coding: utf-8 -*- #matplotlib小测试 ”’ import mat…

Python 2023年9月1日
079
• #### SSTI注入

文章目录 1.概念 * 1.1 什么是Flask 1.2 SSTI注入的原理 2.使用 * 2.1 Flask框架的使用 2.2 python内置方法介绍 – __cl…

Python 2023年8月12日
0136
• #### 带你认识全新的华为云IoT路网数字化服务

摘要：随着通信技术的发展，交通领域提出以C-V2X车路协同技术来弥补单车智能存在的缺陷，从而推动智能驾驶、自动驾驶技术的成熟。 当前，已有百余年历史的汽车产业，正在向网联化、智能化…

Python 2023年10月25日
070
• #### python界面设计

当开始做一些python项目的时候不知从何入手，看着七七八八的界面设计也慌了，看完这几篇水文后希望对大家有所帮助。 UI (user interface)是程序用户的交互界面，终端…

Python 2023年8月2日
094
• #### Python：Pandas创建Dataframe数据框的六种方法

创建 Dataframe主要是使用 pandas中的 DataFrame函数，其核心就是第一个参数： data，传入原始数据，因此我们可以据此给出六种创建 Dataframe的方法…

Python 2023年8月26日
0106
• #### Pandas 01 快速入门

Pandas（/ˈpændəz/）是一个开源的、BSD 许可的库，为 Python 编程语言提供高性能、易于使用的数据结构和数据分析工具。 Pandas 适合处理一个规正的二维数据…

Python 2023年8月9日
074
• #### 场景之心跳应用

一、心跳概述 常见的IM类应用，比如游戏，直播，聊天室或者客服系统，一般都要依靠服务端做消息中转，将从发送方接受的消息推送给接收方，为保证可靠，快速到达对端，⼤部分IM使⽤长连接建…

Python 2023年10月23日
0109
• #### 欧洲发布统一电子设备的充电端口修正案，拟统一充电规格（USB Type-C）

2022年6月7日，欧洲议会（European Parliament）发布一项关于无线电设备指令的修正案，用以统一常用的中小型便携式电子设备的充电端口。该修正案旨在减少每年产生的电…

Python 2023年10月29日
061

Python 2023年8月10日
0128
• #### 强化学习-学习笔记4 | Actor-Critic

Actor-Critic 是价值学习和策略学习的结合。Actor 是策略网络，用来控制agent运动，可以看做是运动员。Critic 是价值网络，用来给动作打分，像是裁判。 4. …

Python 2023年10月25日
0139
• #### pytest 常用命令、插件合集；Python + pytest + requests + yaml

一、pytest常用插件合集 pip install pytest 单元测试框架 pip install pytest-html 生成html测试报告 pip install py…

Python 2023年9月11日
088
• #### 数据科学—赋能未来，Python崛起

| 1.1 为什么是Python？ 首先恭喜你朝着成为数据科学家迈出了一大步！ 在本系列中，你将了解到数据科学中最流行的Python库： numpy、 pandas 和 matpl…

Python 2023年8月28日
057
• #### 2-Allure的使用

文章目录 * – Allure简介 – Allure环境搭建 – Allure使用示例 – Allure层级的设置 – …

Python 2023年9月12日
0103