文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python3学习笔记06——列表创建及

2023-01-31 02:00

关注

在Python中使用for循环是,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型。
那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

from collections.abc import Iterable

r=isinstance('ABC',Iterable) # str是否可迭代

print(r)

结果:
TRUE
表明是可迭代对象。

#用循环生成列表

L=[]
for x in range(1,11):
    L.append(x*x)

print(L)

#列表生成式

print([x*x for x in range(1,11)])

#for 循环后边还可以加上if判断
#比如只生成偶数的平方

print([x*x for x in range(1,11) if x%2==0])

#还可以使用两层循环,生成全排列

print([m+n for m in 'ABC' for n in 'XYZ'])

#把一个list中的所有的字符串变成小写:

L=['Hello','World','IBM','Apple']
print([s.lower() for s in L])

运行结果依次为:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[4, 16, 36, 64, 100]
[‘AX’, ‘AY’, ‘AZ’, ‘BX’, ‘BY’, ‘BZ’, ‘CX’, ‘CY’, ‘CZ’]
[‘hello’, ‘world’, ‘ibm’, ‘apple’]

如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以里欸报生成式会报错。
L= L=[‘Hello’,‘World’,18,‘IBM’,‘Apple’]
此时,可使用内建的isinstance函数判断一个变量是不是字符串:

#list中既包含字符串,有包含整数

L=['Hello','World',18,'Apple',None]
print([s.lower() for s in L if isinstance(s,str) ])

生成器:
不创建完整的list,一边循环一边计算的机制,成为生成器:generator,此方法可节省大量空间。

要创建一个generator,有很多种方法。第一种很简单,只要把一个列表生成式的【】改成(),就创建了一个generator():

g=(x*x for x in range(10))
print(g)

输出结果:
<generator object at 0x0000010EA9D3FD68>

generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多元素时,抛出StopIteration的错误。
当然,不断调用next(g)这种打印返回值的方法太变态了,正确的方法是使用for循环,因为generator也是可迭代对象:

第二种方法:用函数生成
斐波拉契数列的推算规则,可以从第一个元素开始,推算出后续任意的元素,这种逻辑其实非常类似generator,也就是说,斐波拉契函数和generator仅一步之遥。要把fib函数变成generator,只需要把print(b)改为yield b 就可以了。

def fib(max):
    n,a,b=0,0,1
    while n<max:
        yield b
        a,b=b,a+b
        n=n+1
    return 'done'

print(fib(6))

这里最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

#杨辉三角

def yanghui(t):
    print([1])
    line=[1,1]
    print(line)
    for i in range(2,t):
          r=[]
          for i in range(0,len(line)-1):
              r.append(line[i]+line[i+1])
          line=[1]+r+[1]
          print(line)
print(yanghui(6))

输出结果:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
None

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯