列表推导式的使用与练习 | 手把手教你入门Python之三十五

简介: 本节重点介绍列表推导式,列表的复制

上一篇:列表嵌套 | 手把手教你入门Python之三十四
下一篇:元组的基本使用和字典的增删改查 | 手把手教你入门Python之三十六

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。

列表推导式

所谓的列表推导式,就是指的轻量级循环创建列表

1. 基本的⽅式

image.png

2. 在循环的过程中使⽤if

image.png

3. 2个for循环

image.png

4. 3个for循环

image.png

image.png

练习

请写出⼀段 Python 代码实现分组⼀个 list ⾥⾯的元素,⽐如 [1,2,3,...100]变成 [[1,2,3],[4,5,6]....]
参考答案:

a = [x for x in range(1,101)]
b = [a[x:x+3] for x in range(0,len(a),3)]

练习参考

image.png

列表的复制

查看以下代码,说出打印的结果。

a = 12
b = a
b = 13
print(b)
print(a)
nums1 = [1, 5, 8, 9, 10, 12]
nums2 = nums1
nums2[0] = 100
print(nums2)
print(nums1)

思考:

  1. 为什么修改了 nums2⾥的数据,nums1的数据也会改变?
    Python中的赋值运算都是引⽤(即内存地址)的传递。对于可变类型来说,修改原数据的值,会改变赋值

对象的值。

  1. 怎样nums1和nums2变成两个相互独⽴不受影响的列表?
    使⽤列表的 copy ⽅法,或者 copy 模块就可以赋值一个列表。

列表的copy⽅法

使⽤列表的copy⽅法,可以直接将原来的列表进⾏复制,变成⼀个新的列表,这种复制⽅式是浅复制。

nums1 = [1, 5, 8, 9, 10, 12]
nums2 = nums1.copy() # 调⽤列表的copy⽅法,可以复制出⼀个新的列表
nums2[0] = 100
# 修改新列表⾥的数据,不会影响到原有列表⾥的数据
print(nums2)
print(nums1)

copy模块的使⽤

除了使⽤列表的copy⽅法以外,Python还提供了copy模块来复制⼀个对象。copy模块提供了浅复制和深复制两种⽅式,它们的使⽤⽅式相同,但是执⾏的效果有⼀定的差异。

浅拷⻉

浅拷⻉是对于⼀个对象的顶层拷⻉,通俗的理解是:拷⻉了引⽤,并没有拷⻉内容。

import copy
words1 = ['hello', 'good', ['yes', 'ok'], 'bad']
# 浅拷⻉只会拷⻉最外层的对象,⾥⾯的数据不会拷⻉,⽽是直接指向
words2 = copy.copy(words1)
words2[0] = '你好'
words2[2][0] = 'no'
print(words1) # ['hello', 'good', ['no', 'ok'], 'bad']
# wrods2 ⾥的 yes 被修改成了 no
print(words2) # ['你好', 'good', ['no', 'ok'], 'bad']

image.png

深拷⻉

深拷⻉是对于⼀个对象所有层次的递归拷⻉。

import copy
words1 = ['hello', 'good', ['yes', 'ok'], 'bad']
# 深拷⻉会将对象⾥的所有数据都进⾏拷⻉
words2 = copy.deepcopy(words1)
words2[0] = '你好'
words2[2][0] = 'no'
print(words1) # ['hello', 'good', ['yes', 'ok'], 'bad']
print(words2) # ['你好', 'good', ['no', 'ok'], 'bad']

image.png
image.png

切⽚

列表和字符串⼀样,也⽀持切⽚,切⽚其实就是⼀种浅拷⻉。

words1 = ['hello', 'good', ['yes', 'ok'], 'bad']
words2 = words1[:]
words2[0] = '你好'
words2[2][0] = 'no'
print(words1) # ['hello', 'good', ['no', 'ok'], 'bad']
print(words2) # ['你好', 'good', ['no', 'ok'], 'bad']
相关文章
|
1天前
|
Python
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
|
1天前
|
存储 索引 Python
Python从入门到精通——1.3.1练习编写简单程序
Python从入门到精通——1.3.1练习编写简单程序
|
1天前
|
开发框架 前端开发 数据库
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
|
1天前
|
数据采集 数据可视化 数据处理
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
|
1天前
|
Java 数据库连接 数据处理
Python从入门到精通:3.1.2多线程与多进程编程
Python从入门到精通:3.1.2多线程与多进程编程
|
1天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
2天前
|
算法 数据挖掘 数据处理
使用 Python 循环创建多个列表
在Python中,动态创建多个列表对于数据处理和算法实现十分有用。本文介绍了四种方法:1) 列表推导式,如创建偶数和奇数列表;2) 使用循环和`append()`,示例为生成斐波那契数列;3) 结合字典与循环,按条件(如正负数)分组;4) 列表生成器,用于一次性生成多组随机数列表。这些方法有助于提高代码效率和可读性。
14 1
|
7天前
|
机器学习/深度学习 数据可视化 数据挖掘
《Python 简易速速上手小册》第9章:数据科学和机器学习入门(2024 最新版)
《Python 简易速速上手小册》第9章:数据科学和机器学习入门(2024 最新版)
19 1
|
7天前
|
人工智能 数据挖掘 程序员
《Python 简易速速上手小册》第1章:Python 编程入门(2024 最新版)
《Python 简易速速上手小册》第1章:Python 编程入门(2024 最新版)
35 0

热门文章

最新文章