首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

切片、列表生成式以及生成器

一: 切片:切片主要针对List、Tuple以及字符串操作。

例子:

TestList= list(range(100))

print(TestList[:10])#获取前10个

print(TestList[-10:])#获取后10个

print(TestList[10:20])#获取10-20之间的数,不包括20

print(TestList[10:30:5])#获取10-30之间,每隔5个的数:[10, 15, 20, 25]

Testtuple = (range(100))

print(Testtuple.__len__())

print(Testtuple[:10])#获取前10个返回的还是元祖,其他操作都是一样的

print("nishizhunishuzhuhuhuuh"[:10])#获取前10个返回的还是字符串,其他操作都是一样的

二: 列表生成式:Python内置的非常简单却强大的可以用来创建list的生成式。

2.1:生成List (1+1,2+2,3+3,,,)正常可以使用循环操作,但是如果使用列表生成式的话,就很简单。

# 正常的循环生成方式如下:

TestList= list()

foriinrange(1,20):

TestList.append(i+i)

print(TestList)

#上述循环语句完全可以使用下述一条语句实现

SimpleTestList= [j+jforjinrange(1,20)]

print(SimpleTestList)

2.2:使用循环语句之后还可以使用判断语句

# 注意for循环之后的if语句

SimpleTestList= [j+jforjinrange(1,20)ifj %2==]

print(SimpleTestList)

2.3:还可以使用多层循环,一般三层以上很少用。

SimpleTestList= [m+n+jformin"AB"fornin"12"forjin"ab"]

print(SimpleTestList)

'''

Output:

['A1a', 'A1b', 'A2a', 'A2b', 'B1a', 'B1b', 'B2a', 'B2b']

'''

三:生成器:从语法上讲,生成器是一个带yield语句的函数。一个函数或者子程序只返回一次,但一个生成器能暂停执行并返回一个中间的结果-----那就是yield语句的功能,返回一个值给调用者并暂停执行。当生成器的next()方法被调用的时候,它会准确地从离开的地方继续。

在Python中,可以简单地把列表生成式改成generator,也可以通过函数实现复杂逻辑的generator

if__name__ =="__main__":

'''

下述语句:

NormalList是一个简单的list

GeneratorList是一个generator,将[]更换成()就可以生成一个generator

输出结果:

Type of NormalList:

Type of GeneratorList:

1

'''

NormalList = [x * xforxinrange(10)]

GeneratorList = (x * xforxinrange(10))

print("Type of NormalList:", type(NormalList))

print("Type of GeneratorList:", type(GeneratorList))

print(next(GeneratorList))

print(next(GeneratorList))

'''

下述语句:

otherFunc是一个简单的函数

SimpleFunc是一个generator函数

输出结果:

Type of MyObj:

this is normal function

Type of otherFunc:

this is generator function

1

2 next

'''

defSimpleFunc():

print("this is generator function")

yield1

yield"2 next"

yield"3sss"

defotherFunc():

print("this is normal function")

MyObj = SimpleFunc()

print("Type of MyObj:", type(MyObj))

print("Type of otherFunc:", type(otherFunc()))

print(next(MyObj))#对于这里,输出了函数SimpleFunc的打印信息,然后输出1

print(next(MyObj))#对于这里,就不输出打印信息了,直接输出‘2 next’,所以参考定义《yield能暂停执行并返回一个中间的结果,当生成器的next()方法被调用的时候,它会准确地从离开的地方继续》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180727G0YQ4600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券