Python—推导式

推导式

推导式:comprehensions(又称解析式),是Python的一种独有特性,相当于语法糖的存在,推导式是可以从一个数据序列构建另一个新的数据序列的结构体。
共有三种推导,在Python2和3中都有支持:

  • 列表(list)推导式
  • 集合(set)推导式
  • 字典(dict)推导式

列表推导式 randint

基本格式: 变量名 = [expression1 for variable in sequence[, if expression2]]
expression1 : 列表生成元素表达式,可以是有返回值的函数。
for variable in sequence : 迭代sequence将variable传入expression1。
if expresiion2 : 可选,根据条件过滤。
?
1.最基本的列表推导式

>>> arr = [i for i in range(5)]
>>> arr
[0, 1, 2, 3, 4]

2.附带运算的列表推导式

>>> arr = [i**2 for i in range(5)]
>>> arr
[0, 1, 4, 9, 16]
>>> arr = [pow(i, 2) for i in range(5)]
>>> arr
[0, 1, 4, 9, 16]
>>> arr = [pow(i, 2) if i%2==0 else -pow(i, 2) for i in range(5)]
>>> arr
[0, -1, 4, -9, 16]

3.附带条件的列表推导式

>>> arr = [i for i in range(10) if i < 5]
>>> arr
[0, 1, 2, 3, 4]

4.多重循环的列表推导式

>>> list_ = [[1, 2], [3, 4], [5, 6]]
>>> arr = [i for sub_list in list_ for i in sub_list]
>>> arr
[1, 2, 3, 4, 5, 6]
>>> arr = [x+y for x in range(5) for y in range(2)]
>>> arr
[0, 1, 1, 2, 2, 3, 3, 4, 4, 5]
#  0     1     2     3     4
# 0 1  0 1  0 1  0 1  0 1
# 0 1  1 2  2 3  3 4  4 5

5.更多用法

>>> dict_ = {'P':'y', 't':'h', 'o':'n'}
>>> arr = [k+v for k,v in dict_.items()]
>>> arr
['Py', 'th', 'on']
>>> from random import randint
>>> arr = [randint(1, 5) for i in range(5)]
>>> arr
[3, 2, 3, 2, 1]

集合推导式

与列表推导式差不多一样,只不过是将[ ]换为{ }

set_ = {x+y for x in range(5) for y in range(3)}
>>> set_
{0, 1, 2, 3, 4, 5, 6}
>>> set_ = {k+v for k,v in dict_.items()}
>>> set_
{'on', 'Py', 'th'}

字典推导式

变量名 = {表达式 for 临时变量 in 可迭代内容}
?

>>> new_dict = {i:pow(i, 2) for i in range(5)}
>>> new_dict
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
>>> new_dict = {x:'Python'.index(x) for x in 'Python'}
>>> new_dict
{'P': 0, 'y': 1, 't': 2, 'h': 3, 'o': 4, 'n': 5}
>>> 
>>> dict_ = {'P':'y', 't':'h', 'o':'n'}
>>> new_dict = {v:k for k,v in dict_.items()}
>>> new_dict
{'y': 'P', 'h': 't', 'n': 'o'}
>>> dict_ = {'a': 10, 'b': 20, 'A': 3, 'C': 7, 'd': 5, 'x': 2, 'X': 4, 'y': 8}
>>> new_dict = {k.upper(): dict_.get(k.lower(), 0) + dict_.get(k.upper(), 0) for k in dict_.keys() if k in 'aAbcDxy'}
>>> new_dict
{'A': 13, 'B': 20, 'X': 6, 'Y': 8}

为什么元组不可以用推导式

Python中,将( )用于了生成器,将列表推导式的[ ]改成( )即可得到生成器。

>>> gener = (i for i in range(5))
>>> type(gener)
<class 'generator'>
>>> gener
<generator object <genexpr> at 0x00000179ECB01BA0>
>>> [i for i in gener]
[0, 1, 2, 3, 4]
>>> [i for i in gener]
[]

不过可以通过类型强制性转换,将生成器转换为对应的类型数据

>>> gener = (i for i in range(5))
>>> list(gener)
[0, 1, 2, 3, 4]
>>> gener = (i for i in range(5))
>>> tuple(gener)
(0, 1, 2, 3, 4)
>>> gener = (i for i in range(5))
>>> set(gener)
{0, 1, 2, 3, 4}

原文地址:https://www.cnblogs.com/malinqing/p/11288237.html

时间: 2024-07-31 00:32:13

Python—推导式的相关文章

python 推导式和迭代器、生成器

1.常用推导式 推导式是从一个或者多个迭代器快速简洁创建数据结构的一种方法. 1.1 _ 列表推导式 最简单的形式:  [exprssion for item in iterable] 示例:  number_list = [x for x in range(1,10)]  加上条件表达式的形式:  [exprsssion for item in iterable if condition]  示例: a_list = [x for x in range(1,7) if x %2 ==1] 多个

Python 推导式、迭代器、生成器、模块和包

一.推导式 (一).列表推导式(集合推导式也同理于此) 利用列表推导式,取出1-20内所有偶数 li = [i for i in range(1, 21) if i % 2 == 0] # 如果只有一个条件,要把if语句写在最后面 第一个i是放入列表的值,后面都是推导的公式 print(li) 第一个 i 相当于下面等价方案中的 append(i).把 i 换成 "a" ,输出的列表中全是 "a" 等价于 for i in range(1,21): if i%2==

Python 推导式(列表推导式,字典推导式,集合推导式)

Python的各种推导式 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导. 列表推导式 字典推导式 集合推导式 列表推导式 1.使用[]生成list var = [out_exp_put for out_exp in input_list if out_exp == 2] out_exp_put 列表生成出来的表达式,可以是有返回值的函数. for out_exp in input_list

python 推导式(Comprehensions)

一.介绍 列表推导(list comprehensions) 这是一种将for循环.if表达式以及赋值语句放到单一语句中的一种方法.换句话说,你能够通过一个表达式对一个列表做映射或过滤操作. 一个列表推导式包含以下几个部分: 1.一个输入序列 2.一个表示输入序列成员的变量 3.一个可选的断言表达式 4.一个将输入序列中满足断言表达式的成员变换成输出列表成员的输出表达式 二.举例 假如需要从列表中将所有大于0的整数平方生成一个新的列表,你也许会这么写: num_list = [11,2,-33,

python推导式创建序列

推导式创建序列 推导式是一个或多个迭代器快速创建序列的一种方式.可以将循环和条件判断结合,简化代码.几个推导式注意符号的使用,比如小括号,方括号,大括号等等. 列表推导式 列表推导式生成列表对象,语法: [表达式 for item in 可迭代对象] 或者:[表达式 for item in 可迭代对象 if 条件判断] 字典推导式 字典推导式生成字典对象,语法如下: {key_expression:value_expression for 表达式 in 可迭代对象} 也可以使用多个循环和判断 统

python 推导式

names = ['Tom','Billy','Jefferson','Andrew','Wesley','Steven', 'Joe','Alice','Jill','Ana','Wendy','Jennifer','Sherry','Eva'] names1=[] # 声明空列表 names2=[] for i in names: if len(i)>4: names1.append(i) print(names1) for i in names: if len(i)<=5: names2

六. python推导式

一 .推导式 表达式 1.列表推导式 # 列表推到式 egg=['鸡蛋%s'%i for i in range(10)] # 列表推导式 print(egg) aa=[i for i in range(10)] print(aa) bb=[i*2 for i in range(10)] print(bb) eggl=[] for i in range(10): eggl.append("鸡蛋%s"%i) print(eggl)  2.生成器表达式 # 生成器表达式 g=(i for i

python 3列表推导式的的一点理解!

Python的列表推导式对于新手来说一般都难以理解,简单看个例子: [x * x for x in range(1,100)] 上面是一个很简单的列表推导式,我的理解方式是从右往左看. 一点一点来看吧,我们先用range(1,100)生成一个迭代器对象(1-99的列表),然后再迭代这个列表的每一个对象,然后让每个对象执行一次平方操作,最后生成一个列表. -----------------------------分割线----------------------------------------

Python的列表推导式

1.列表推导式书写形式: [表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件] 2.举例说明: #!/usr/bin/python # -*- coding: utf-8 -*- li = [1,2,3,4,5,6,7,8,9] print [x**2 for x in li] print [x**2 for x in li if x>5] print dict([(x,x*10) for x in li]) print [ (x, y) for