首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python3学习笔记06——列表创建

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

作者头像
py3study
发布于 2020-01-12 13:12:35
发布于 2020-01-12 13:12:35
92500
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections.abc import Iterable

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

print(r)

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

#用循环生成列表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
L=[]
for x in range(1,11):
    L.append(x*x)

print(L)

#列表生成式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print([x*x for x in range(1,11)])

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print([x*x for x in range(1,11) if x%2==0])

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print([m+n for m in 'ABC' for n in 'XYZ'])

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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中既包含字符串,有包含整数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
L=['Hello','World',18,'Apple',None]
print([s.lower() for s in L if isinstance(s,str) ])

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 就可以了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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语句处继续执行。

#杨辉三角

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Rust语法入门
Rust 是一种系统级编程语言,它的设计目标是提供高性能、安全性和并发性。Rust 的主要优势包括:
码客说
2023/04/17
1.4K0
一网打尽 Rust 语法
大家好,我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder
前端柒八九
2024/04/30
2250
一网打尽 Rust 语法
🌱 Rust内存管理黑魔法:从入门到"放弃"再到真香
内存管理是程序世界的"隐形战场",而 Rust 用一套所有权系统直接重构规则——没有 GC、没有手动 malloc/free,却能在编译期拦截 90% 的内存错误!
Jimaks
2025/04/27
2650
rust闭包(Closure)
闭包在现代化的编程语言中普遍存在。闭包是一种匿名函数,它可以赋值给变量也可以作为参数传递给其它函数,不同于函数的是,它允许捕获调用者作用域中的值。Rust 闭包在形式上借鉴了 Smalltalk 和 Ruby 语言,与函数最大的不同就是它的参数是通过 |parm1| 的形式进行声明,如果是多个参数就 |param1, param2,…|, 下面给出闭包的形式定义:
zy010101
2023/04/27
7480
rust闭包(Closure)
Rust到底值不值得学--Rust对比、特色和理念
其实我一直弄不明白一点,那就是计算机技术的发展,是让这个世界变得简单了,还是变得更复杂了。 当然这只是一个玩笑,可别把这个问题当真。
俺踏月色而来
2019/10/14
2.8K0
Rust闭包的虫洞穿梭
闭包(Closure)的概念由来已久。无论哪种语言,闭包的概念都被以下几个特征共同约束:
袁承兴
2020/09/19
1.4K0
rust 上手很难?搞懂这些知识,前端开发能快速成为 rust 高手
在我的交流群里有许多人在讨论 rust。所以陆续有人开始尝试学习 rust,不过大家的一致共识就是:rust 上手很困难。当然,这样的共识在网上也普遍存在。
用户6901603
2024/03/20
1.6K1
rust 上手很难?搞懂这些知识,前端开发能快速成为 rust 高手
Rust 入门 (Rust Rocks)
做区块链的基本几乎没有人不知道 Rust 这门编程语言,它非常受区块链底层开发人员的青睐。说来也奇怪,Rust 起源于 Mazilla,唯一大规模应用就是 Firefox,作为小众语言却在区块链圈子里火了。这其中应该和以太坊的发起人 Govin Wood 创建的 Parity 项目有关,Parity 是一款用 Rust 编写的以太坊客户端。
lambeta
2019/09/24
2.5K0
Rust学习:如何解读函数签名?
在Rust中,函数签名类似“讲故事”。经验丰富的Rust程序员,只需浏览一个函数的签名,就可以知道该函数大部分的行为。
MikeLoveRust
2019/09/03
2.3K0
Rust入坑指南:智能指针
在了解了Rust中的所有权、所有权借用、生命周期这些概念后,相信各位坑友对Rust已经有了比较深刻的认识了,今天又是一个连环坑,我们一起来把智能指针刨出来,一探究竟。
Jackeyzhe
2020/03/12
9480
rust的高级特性
rust中的表达式是什么{}包围的部分,函数,impl,match里面,if else表达式,通过这些功能分割系统
李子健
2022/05/10
6870
rust的内存管理
内存管理是rust最有意思的事情了。rust的内存管理有三条准则。 let分配资源 分配会转移所有权,比如赋值直接move了 值和变量在作用域末尾会被清理,释放 drop方法会在释放前调用 rust支持移动语义和复制语义,为此抽象出了两个trait,clone和copy 非堆内存可以使用copy,隐式转化,clone需要显示调用 关于借用的规则,使用& 一个引用的生命周期不能超过其被引用的时间 如果存在一个可变借用,不允许存在其他值 如果不存在可变借用,允许存在多个不可变借用 借用规则方法类型 &self
李子健
2022/05/08
8040
【翻译】Rust生命周期常见误区
我曾经有过的所有这些对生命周期的误解,现在有很多初学者也深陷于此。我用到的术语可能不是标准的,所以下面列了一个表格来解释它们的用意。
MikeLoveRust
2020/07/28
1.7K0
听GPT 讲Rust源代码--library/alloc(2)
在Rust源代码中,rust/library/alloc/src/vec/mod.rs这个文件是Rust标准库中的Vec类型的实现文件。Vec是一个动态大小的数组类型,在内存中以连续的方式存储其元素。
fliter
2024/02/26
2560
听GPT 讲Rust源代码--library/alloc(2)
Rust中的关键字
原始标识符(Raw identifiers)允许你使用通常不能使用的关键字,其带有 r# 前缀
fliter
2023/10/05
2740
Rust中的关键字
【Rust】005-Rust 结构体
在Rust中,元组结构体是一种特殊的结构体形式,它结合了元组和结构体的特性。元组结构体类似于普通的结构体,但它没有字段名称,只有字段类型。这种结构体更像是带标签的元组,通常用于需要对某些数据进行简单封装而不需要命名每个字段的场景。
訾博ZiBo
2025/01/06
1790
《Rust避坑式入门》第1章:挖数据竞争大坑的滥用可变性
赵可菲是一名Java程序员,一直在维护一个有十多年历史的老旧系统。这个系统即将被淘汰,代码质量也很差,每次上线都会出现很多bug,她不得不加班修复。公司给了她3个月的内部转岗期,如果转不出去就会被裁员。她得知公司可能会用Rust重写很多系统,于是就报名参加了公司的Rust培训,希望能够转型。
程序员吾真本
2024/08/29
6960
《Rust避坑式入门》第1章:挖数据竞争大坑的滥用可变性
【译】为 嵌入式 C 程序员编写的 Rust 指南
这是来自 Google OpenTitan 团队,给嵌入式 C 程序员专门打造的一份 Rust 指南。
张汉东
2021/10/13
5.5K0
Rust 总结
所有权是用来管理堆上内存的一种方式,在编译阶段就可以追踪堆内存的分配和释放,不会对程序的运行期造成任何性能上的损失。
谛听
2022/06/04
1.8K0
Rust入门之严谨如你
Rust作为一门快速发展的编程语言,已经在很多知名项目中使用,如firecracker、libra、tikv,包括Windows和Linux都在考虑Rust【1】。其中很重要的因素便是它的安全性和性能,这方面特性使Rust非常适合于系统编程。
Radar3
2020/11/25
1.8K2
相关推荐
Rust语法入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档