您的位置:时时app平台注册网站 > 编程知识 > Python 的几种推导式【时时app平台注册网站】

Python 的几种推导式【时时app平台注册网站】

2019-10-30 04:37

对以上的二种推导式分别比如深入分析:

例子一:大小写key合并

几个循环的输出结果是千篇一律的:

1、使用 [] 生成 list

例如:

list = [ i for i in range(20) if i%2 == 0 ]
print(list)

#output:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

大器晚成、列表推导式

看得出,使用next()方法遍历生成器时,最终是以抛出一个StopIeration万分终止。

1. 列表推导式
2. 字典推导式
3. 集合推导式

基本格式

list2=[x for x in list1 if 'a' in x] 

三、集结推导式


它跟列表推导式也是相像的。差距在于它应用大括号 {},何况数据是冬天和无重复的。

Set = { i**2 for i in [1,2,3,4,5,3] }
print(Set)

#output:{16, 1, 4, 9, 25}
multiples = (i for i in range(30) if i % 3 is 0)
print(type(multiples))
# Output: <type 'generator'>

生成器构造实例

二、字典推导式


存在 key 和 value,使用的是 {}。

dic = { "A":1, "b":2, "C":3, "d":4 }
new_dic = { k:v for k,v in dic.items() if k <= 'a'}
print(new_dic)

#output:{'C': 3, 'A': 1}

variable = [out_exp_res for out_exp in input_list if out_exp == 2]

def my_range(start, end):
  for n in range(start, end):
    ret = yield 2*n   1
    print(ret)

g3 = my_range(3, 6)
print(g3.send(None))
print(g3.send('hello01'))
print(g3.send('hello02'))

推导式 comprehensions(又称分析式):是 Python 中很有力的、非常受应接的特色,具备语言简练,速度快等优点。推导式包蕴:

将俩表推导式的[]改良()就能够获得生成器。

 python2.7中就是range(生成式) 和 xrange(生成器)的区别

大器晚成、列表推导式


multiples = [i for i in range(30) if i % 3 is 0]
print(multiples)
# Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
print(next(g3))
print(next(g3))
print(next(g3))

2、使用 () 生成 generator

将列表推导式的 [] 换来 () 就能够得到生成器。

generator = ( i for i in range(20) if i%2 == 0 )
print(generator)

#output:<generator object <genexpr> at 0x0000000000B5CA40>

透过 next() 就足以依次调用生成器中的数据。

例一:

print(next(g1))
print(next(g1))
print(next(g1))
print(next(g1))

1、使用[]生成list

for x in range(0,101): 
  if x%2==0: 
    numbers.append(x) 
print(numbers) 

字典推导和列表推导的采纳办法是周边的,只不中括号该改成大括号。直接比方表明:

出口结果:

squared = {x**2 for x in [1, 1, 2]}
print(squared)
# Output: set([1, 4])
#x for x in range(0,101) for循环遍历出来的值,放入列表中 
numbers=[x for x in range(0,101)] 
print(numbers) 

更加多关于Python相关内容感兴趣的读者可查阅本站专项论题:《Python列表(list)操作本领总括》、《Python数组操作本领总计》、《Python字符串操作手艺汇总》、《Python函数使用技艺总计》、《Python入门与进级卓越教程》及《Python数据结构与算法教程》

输出结果:

二、字典推导式

因为列表生成式是直接创设二个新的list,它会二回性地把富有数据都存放到内部存款和储蓄器中,那会设有以下多少个难点:

例一:

急需视意况而定,假如数据量非常的大,推荐使用生成器

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

可以看到,使用循环遍历生成器时比较精简,且最终不会抛出贰个StopIeration分外。因而使用循环的不二等秘书诀遍历生成器的不二秘技才是被引入的。

2、使用()生成generator

#for循环遍历0~101的数字,如果数字对2取余==0,表示是偶数,x放在列表中 
numbers=[x for x in range(0,101)if x%2==0] 
print(numbers) 

三、集合推导式

实例2:使用循环遍历生成器

希望本文所述对大家Python程序设计有所扶助。

7
9
11

mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
mcase_frequency = {
  k.lower(): mcase.get(k.lower(), 0)   mcase.get(k.upper(), 0)
  for k in mcase.keys()
  if k.lower() in ['a','b']
}
print mcase_frequency
# Output: {'a': 17, 'b': 34}

列表生成式扶持双层for循环

您大概感兴趣的文章:

  • Python列表推导式与生成器表明式用法示例
  • 依据Python列表剖判(列表推导式)
  • Python列表推导式的利用情势
  • Python学习小本领之列表项的推导式与过滤操作
  • Python列表生成式与生成器操作示例
  • Python3中的列表生成式、生成器与迭代器实例详解
  • python列表生成式与列表生成器的运用
  • 比如来佛说讲授Python中的迭代器、生成器与列表分析用法
  • 浅谈Python中列表生成式和生成器的界别
  • Python while、for、生成器、列表推导等说话的举行作用测验
  • Python列表推导式与生成器用法剖判
numbers=[] 
for x in range(0,101): 
  numbers.append(x) 
print(numbers) 
mcase = {'a': 10, 'b': 34}
mcase_frequency = {v: k for k, v in mcase.items()}
print mcase_frequency
# Output: {10: 'a', 34: 'b'}

既然如此经过列表生成式就可以直接创制一个新的list,那么为啥还要有生成器存在呢?

它们跟列表推导式也是相同的。 唯生机勃勃的差别在于它利用大括号{}。

# 使用类似列表生成式的方式构造生成器
g1 = (2*n   1 for n in range(3, 6))

# 使用包含yield的函数构造生成器
def my_range(start, end):
  for n in range(start, end):
    yield 2*n   1

g2 = my_range(3, 6)
print(type(g1))
print(type(g2))

推导式comprehensions(又称剖判式),是Python的风度翩翩种独有特色。推导式是足以从贰个数量体系营造另叁个新的多少系列的结构体。 共有三种推导,在Python2和3中都有支撑:

列表中寄存0~100的偶数:

def squared(x):
  return x*x
multiples = [squared(i) for i in range(30) if i % 3 is 0]
print multiples
# Output: [0, 9, 36, 81, 144, 225, 324, 441, 576, 729]
for x in g1:
  print(x)

for x in g2:
  print(x)

正文实例陈诉了Python列表推导式、字典推导式与聚焦推导式用法。分享给大家供我们参考,具体如下:

rs_list=[] 
for s in list1: 
  if 'a' in s: 
    rs_list.append(s) 
print(rs_list) 

例二:

7
9
11
Traceback (most recent call last):
  File "***/generator.py", line 31, in <module>
    print(next(g2))
StopIteration

事例二:急迅改造key和value

列表生成式是快速生成多少个列表的部分公式

out_exp_res:  列表生成成分表明式,能够是有重临值的函数。
for out_exp in input_list:  迭代input_list将out_exp传入out_exp_res表明式中。
if out_exp == 2:  依照标准过滤哪些值能够。

输出结果:

列表生成式返回结果费用的年月: 0.8215489387512207
列表生成式再次回到结果占用内部存款和储蓄器大小:81528056
生成器再次回到结果费用的日子: 0.0
生成器重返结果占用内部存款和储蓄器大小:88

  1. 要调用生成器发生新的要素,有二种方法:
  2. 调用内置的next()方法
  3. 行使循环对生成器对象开展遍历(推荐)
  4. 调用生成器对象的send()方法

<class 'generator'>
<class 'generator'>

用列表生成式生成列表:

7
None
9
None
11

  1. next()会调用yield,但不给它传值
  2. send()会调用yield,也会给它传值(该值将改成当下yield表达式的结果值)

结论:

咱俩能够做个考试:相比较一下生成一个1000万个数字的列表,分别看下用列表生成式和生成器时再次来到结果的时日和所占内部存款和储蓄器空间的轻重:

需求表达的是:假如生成器函数有再次回到值,要获得该重返值的话,只可以通过在八个while循环中不断的next(),最终经过捕获StopIteration十分

列表生成式:会将具备的结果一切计算出来,把结果贮存到内部存储器中,就算列表中多少超级多,就能占领过多的内部存款和储蓄器空间,可能会产生MemoryError内存不当也许变成程序在运行时出现卡顿的事态

生成器的调用方式

用列表生成式生成列表:[要归入列表的数据    简单的表明式1   表明式2]

出口结果:

在列表中贮存0~100的数:

7
9
11
Traceback (most recent call last):
  File "***/generator.py", line 26, in <module>
    print(next(g1))
StopIteration

  1. 内部存款和储蓄器容积有限,由此列表体量是轻易的;
  2. 当列表中的数据量相当的大时,会占用大批量的内存空间,假若大家无非须要拜见前面有限个要素时,就可以促成内部存款和储蓄器财富的宏大浪费;
  3. 当数据量不小时,列表生成式的归来时间会比异常的慢;

7
hello01
9
hello02
11

列表生成式:

import time
import sys

time_start = time.time()
g1 = [x for x in range(10000000)]
time_end = time.time()
print('列表生成式返回结果花费的时间: %s' % (time_end - time_start))
print('列表生成式返回结果占用内存大小:%s' % sys.getsizeof(g1))

def my_range(start, end):
  for x in range(start, end):
    yield x

time_start = time.time()
g2 = my_range(0, 10000000)
time_end = time.time()
print('生成器返回结果花费的时间: %s' % (time_end - time_start))
print('生成器返回结果占用内存大小:%s' % sys.getsizeof(g2))

上述正是本文的全部内容,希望对我们的读书抱有助于,也盼望大家多都赐教脚本之家。

实例1:使用next()方法遍历生成器

生成器与列表生成式比较

寻找列表list1=['asd','adf','dafg','acbo']带有a的字符

出口结果:

出口结果:

list3=[x*y for x in range(0,10) for y in range(20)] 
print(list3) 

实例3:调用生成器对象的send()方法

见怪不怪写法:

看得出,生成器重返结果的大运大约为0,结果所占内部存款和储蓄器空间的深浅相对于列表生成器来讲也要小的多。

而生成器中的成分是依据钦命的算法推算出来的,唯有调用时才转移对应的多少。那样就不必二回性地把具有数据都浮动,进而节省了大气的内部存款和储蓄器空间,那使得其变动的成分个数大概是一直不范围的,而且操作的归来时间也是丰富飞速的(仅仅是创设三个变量而已)。

列表生成器:会创立二个列表生成器对象,不会三遍性的把具备结果都计算出来,假诺急需获取数据,能够应用next()函数来博取,然而须求小心,大器晚成旦next()函数获取不到数码,会导致现身StopIteration十分错误,能够运用for循环遍历列表生成器,获取具备数据

print(next(g2))
print(next(g2))
print(next(g2))
print(next(g2))

平时说来的列表生成:

普通方法生成列表:

内需注意的是:第叁回调用生成器的send()方法时,参数只好为None,不然会抛出极度。当然也得以在调用send()方法在此之前先调用二次next()方法,指标是让生成器先步向yield表明式。

您或者感兴趣的小说:

  • Python列表推导式与生成器表明式用法示例
  • 依照Python列表深入分析(列表推导式)
  • Python列表推导式、字典推导式与集中推导式用法实例剖析
  • Python列表推导式的利用方式
  • Python学习小技巧之列表项的推导式与过滤操作
  • Python列表生成式与生成器操作示例
  • Python3中的列表生成式、生成器与迭代器实例详解
  • 比喻讲解Python中的迭代器、生成器与列表解析用法
  • 浅谈Python中列表生成式和生成器的区分
  • Python while、for、生成器、列表推导等话语的施行作用测试
  • Python列表推导式与生成器用法解析

本文由时时app平台注册网站发布于编程知识,转载请注明出处:Python 的几种推导式【时时app平台注册网站】

关键词: