python 列表推导_Python列表推导式、字典推导式、集合推导式

几个月前,我在PTA这个编程题练习网站上,把PAT (Basic Level) Practice里面的题目都做了一遍,里面有很多题目,都是一行要输入几个用空格分开的数字。刚开始做的时候,我并没有接触到推导式这个东西,于是乎,每次在进行这种输入的时候,都会用到之前知晓的这个代码list(map(int,input().split())),来使输入内容变成一个元素是数字的列表,因为直接用input().split()会使元素是字符串。但好景不长,在遇到要写较多代码,或者数据较大的题目时,这串代码就会出现运行时间超时的问题。此时,我不得不去寻找新的办法,于是我就接触到了列表推导式,用[int(i) for i in input().split()]可以完美解决超时的问题。

列表推导式

你应该知道,编写这样的代码很痛苦:

>>> ls = []

>>> for i in range(9):

if i % 2 == 0:

ls.append(i)

>>> ls

[0, 2, 4, 6, 8]

这种写法或许用于C语言不错,但在Python中,运行速度很慢,因为解释器在每次循环的时候都要判断序列中的哪一部分需要修改,需要用计数器来跟踪需要处理的元素,而且每次遍历因为append()方法还要额外执行查询函数。而列表推导式就能解决这些问题,它可以使用编排好的功能对上述语法的一部分进行自动化处理。

>>> ls = [i for i in range(9) if i % 2 ==0]

>>> ls

[0, 2, 4, 6, 8]

很明显,列表推导式不仅更加高效,也更加剪短,涉及的语法元素也更少,在大型程序中,也能出现更少的错误。

字典推导式

字典推导式和列表推导式使用方法类似,只是用的是大括号。字典推导式更多的是用于key和value的对调,合并大小写对应的value值,将k统一成小写。

>>> dl = {'a':1, 'b':2, 'c':3}

>>> dl_replace = {v:k for k, v in dl.items()}

>>> dl_replace

{1: 'a', 2: 'b', 3: 'c'}

>>> dl = {'a':1, 'b':25, 'A':124, 'E':21}

>>> dl_merge = {k.lower(): dl.get(k.lower(), 0) + dl.get(k.upper(), 0) for k in dl.keys()}

>>> dl_merge

{'a': 125, 'b': 25, 'e': 21}

集合推导式

集合推导式自带去重的功能。

>>> sl = {i**2 for i in range(-2, 3)}

>>> sl

{0, 1, 4}

你可能感兴趣的:(python,列表推导)