首页 > 编程语言 >[编程基础] Python列表解析总结

[编程基础] Python列表解析总结

时间:2022-12-19 21:56:52浏览次数:64  
标签:示例 Python 创建 编程 列表 print 解析

dates: 2020-06-26 14:29:00 +0800
tags:
  - 编程基础
  - Python

在本教程中,我们将学习使用Python列表解析(list comprehensions)相关知识

1 使用介绍

列表解析是一种基于现有列表创建列表的句法结构。列表解析提供了创建列表的简洁方法。通常需要创建新的列表,其中每个元素是应用于另一个序列或iterable的每个成员的某些操作的结果,或者创建满足特定条件的这些元素的子序列。
列表解析可以用于以下几个地方:

  • 转换列表
  • 筛选列表

列表解析的句法受集合的数学表示法的影响。Python语法的灵感来自Haskell编程语言。
如下是用于创建一组整数值的数学表示法。

S = {x² : x in {0 ... 16}}

下面的伪代码显示了列表解析的语法。它由三部分组成:for循环,可选条件和表达式。for循环遍历整个序列。对于每个循环,如果满足条件,则对表达式进行求值。如果计算出该值,它将被添加到新列表中。for循环和if条件可以有多个。

L = [expression [if condition] for variable in sequence [if condition]]

1.1 Python列表解析转换列表

下面的示例借助列表解析将一个列表转换为另一个列表。
在下面示例中,我们通过将每个元素乘以2从现有列表中创建一个新列表。


a = [1, 2, 3, 4, 5, 6]

# for e in a 循环遍历列表a,然后e每个元素都乘以2,然后将结果添加到新b列表中
b = [e * 2 for e in a]
print(b)
[2, 4, 6, 8, 10, 12]

1.2 从摄氏度计算华氏温度

以下示例显示有摄氏温度的列表。我们要创建一个新的温度表,以华氏温度表示。

celsius = [22, 28, 33, 42, 52]

fahr = [e * 9/5 + 32 for e in celsius]
print(fahr)
[71.6, 82.4, 91.4, 107.6, 125.6]

1.3 Python列表解析过滤列表

在下面的示例中,我们将使用列表解析来过滤列表。以下示例显示一个整数列表。通过过滤创建一个仅包含正整数的新列表。

a = [-4, 2, 0, -1, 12, -3]

# 为了只包括正数,使用一个if条件,该条件适用于每个元素。仅当满足条件的元素才包含在新列表中。
b = [e for e in a if e > 0]
print(b)
[2, 12]

下一个示例按元素类型过滤元素。

a = ['a', 2, 'c', 12, 3, 'd']

# 创建一个只有整数的列表
b = [e for e in a if type(e) == int]
# 创建一个只有字符串的列表
c = [e for e in a if type(e) == str]

print(b)
print(c)
[2, 12, 3]
['a', 'c', 'd']

1.4 Python列表逻辑委托函数

以下示例通过设定过滤函数获得句子中所有元音单词。

def is_vowel(c):

    vowels = 'aeiou'

    if c in vowels:
        return True
    else:
        return False


sentence = 'There are eagles in the sky.'

# if将逻辑委托给is_vowel()
vowels = [c for c in sentence if is_vowel(c)]
print(vowels)
['e', 'e', 'a', 'e', 'e', 'a', 'e', 'i', 'e']

1.5 前置if条件判断

该if条件也可以放在前面。这样可以转换数据。在以下示例中,我们使用列表解析将值转换为"even" 和"odd"。

# i能整除2为even否则是odd
data = ["even" if i % 2 == 0 else "odd" for i in range(7)]
print(data)
['even', 'odd', 'even', 'odd', 'even', 'odd', 'even']

1.6 Python列表解析处理多if条件

在Python列表解析中可以使用多个if条件。

a = [9, 2, 18, 14, 22, 11, 7, 19, 23]

# 选择大于10小于20的数
b = [e for e in a if e > 10 if e < 20]
print(b)
[18, 14, 11, 19]

1.7 Python列表解析处理多个for循环

Python列表解析中可能有多个for循环。以下示例创建两个列表的笛卡尔乘积。列表解析中多个for循环类似于以下条件:

for i in a:
    for j in b:
        print(i,j)
a = [1, 2, 3]
b = ['A', 'B', 'C']

c = [ str(i) + j for i in a for j in b]
print(c)
['1A', '1B', '1C', '2A', '2B', '2C', '3A', '3B', '3C']

以下示例为使用多for循环展平列表

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

# 第一个循环遍历外部列表;第二个for循环遍历嵌套列表。
c = [ e for num in nums for e in num]
print(c)
[1, 2, 3, 3, 4, 5, 6, 7, 8]

1.8 Python嵌套列表解析

Python列表解析中的初始表达式可以是另一个列表解析结果。以下示例定义了一个矩阵,列表解析从原始矩阵创建一个转置矩阵。

M1 = [[1, 2, 3],
      [4, 5, 6],
      [7, 8, 9]]

M1_tr = [[row[i] for row in M1] for i in range(3)]
print(M1_tr)
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

1.9 埃拉托色尼筛选法

埃拉托色尼筛选法Sieve of Eratosthenes是一种古老的计算素数的算法,素数(或素数)是一个大于1的自然数,除了1和它本身之外没有正除数。以下示例计算值不大于的100的素数。

# 创建一个非素数的列表
no_primes = [j for i in range(2, 8) for j in range(i*2, 100, i)]
# 素数就是那些不包含在无素数列表中的数。
primes = [e for e in range(2, 100) if e not in no_primes]
print (primes)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

2 参考

http://zetcode.com/python/listcomprehensions/

标签:示例,Python,创建,编程,列表,print,解析
From: https://www.cnblogs.com/luohenyueji/p/16993174.html

相关文章

  • [编程基础] C++多线程入门8-从线程返回值
    date:2020-05-2917:09:34+0800tags:-编程基础原始C++标准仅支持单线程编程。新的C++标准(称为C++11或C++0x)于2011年发布。在C++11中,引入了新的线程库。因此运行......
  • python之路52 ORMQ查询、ORM事务、查询优化、常用字段及参数、ajax方法
    Q查询进阶操作fromdjango.db.modelsimportQq_obj=Q()#1.产生q对象q_obj.connector='or'#默认多个条件的连接是and可以修改为orq_obj.children.append(('......
  • 进入python的世界_day55_Django—ORM进阶操作、ORM事务、Ajax
    一、ORM进阶操作1.Q查询进阶Q查询还可以将查询的字段改为字符串形式q_obj=Q()q_obj.connector='or'#q对象默认是多个条件也是and关系可以修改为orq_obj.child......
  • Python 1~300的奇数,7的倍数不要
    第一种方法i=1j=0whilei<=300:ifi%2!=0:ifi%7==0:i+=1continuej+=ii+=1print(j)先打出,检验输出300......
  • linux网络编程-进程间通信——信号
    信号是进程间通信的方式之一,进程之间通过发送和接收不同的值来通信,这些不同的值被标示为各种信号。我们使用kill指令杀死一个进程,本质上是kill这个程序给对应的进程发送了......
  • 极简Python语法(4)
    9、面向对象程序设计9.1面向对象概述一种设计思想。是指客观世界中存在的对象,具有唯一性。也可以是抽象的一个事物,具有自己的属性和行为。面向对象技术是一种从组织结构上......
  • Python语法糖之解包运算符
    目录解包运算符*和**一个尴尬的场景可选解决方法可迭代对象解包(*运算符)例子字典解包(**运算符)本博客主要参考为北京大学陈斌老师的下一站Python解包运算符*和**......
  • 全面理解主成分分析(PCA)和MNIST数据集的Python降维实现
    注:本博文为原创博文,如需转载请注明原创链接!!!  这篇博文主要讲述主成分分析的原理并用该方法来实现​​MNIST​​数据集的降维。一、引言  主成分分析是一种降维和主成分......
  • Windows下Python虚拟环境搭建
    pip安装第三方模块virtualenvwrapper-winpipinstallvirtualenvwrapper-win-ihttps://pypi.douban.com/simple/虚拟环境默认创建位置(%USERPROFILE%\Envs)如需修改,......
  • GO语言入门第五节 Go语言的并发编程
    写在前面因为并发相关的东西又多又长。。所以这个专题会分成多篇博客来写啦。。本篇文章包括携程机制,携程和线程的区别使用锁来控制并发使用通道(channel)来控制并发通道的多......