被列表推导式充斥的列表

Python列表操作详解:从基础到列表推导式
本文介绍了Python中列表的各种操作,包括加法、乘法、嵌套列表、is函数、浅拷贝与深拷贝,重点讲解了列表推导式的用法,包括一维和多维列表推导,以及筛选、降维和嵌套等高级应用。通过实例解析了列表推导式的灵活性和效率。

最近又颓了很久,论文数据整理没思路,整理不下去了,还是继续学python吧。

今天终于终于学完了b站上的列表,太多知识点了,321开始!

1.列表的简单运算

①加(即+拼接)

s=[1,2,3]

t=[4,5,6]

s+t     

>>>[1,2,3,4,5,6]

②乘

s*3

>>>[1,2,3,1,2,3,1,2,3]

2.嵌套列表

①列表的嵌套

s=[[1,2,3],[4,5,6],[7,8,9]]

②访问嵌套列表

Ⅰ循环法:

for i in s:

     for each in i:

            print(each)

Ⅱ下标法:

s[0]   >>>[1,2,3]

s[0][0]   >>>1

③循环创建嵌套列表:

Ⅰ循环法:

A=[0]*3

for i in range(3):

     A[i]=[0]*3   

>>>A  :  [[0,0,0],[0,0,0],[0,0,0]]

Ⅱ列表的乘:

B=[[0]*3]*3

>>>B  :  [[0,0,0],[0,0,0],[0,0,0]]

注意:差别在于修改元素时,B修改的是每一行第n个元素,而A修改的只是单个元素。

B[1][1]=1   >>> [[0,1,0],[0,1,0],[0,1,0]]

A[1][1]=1   >>> [[0,0,0],[0,1,0],[0,0,0]]

3.is函数(判断A和B是否相等)

例如:

A="ABC"

B="ABC"

A is B   >>>True

x=[1,2,3]

y=[1,2,3]

x is y   >>>False

因为变量不是盒子,而是引用:例如x=[1,2,3],y=x。相当于x指向存放[1,2,3]的地址,而这个地址给了y。

4.浅拷贝和深拷贝

深拷贝:无论怎么改动新列表(一维or多维),原列表都不变。

浅拷贝就是,对于多维列表,只是第一维深拷贝了,内层的元素改变了,原列表也会变。因此,主要体现在多维列表的差别上!!

①浅拷贝:

Ⅰcopy方法

例如:

x=[1,2,3]

y=x.copy()

x[1]=1

>>> x : [1,1,3]

>>> y : [1,2,3]    注意1:copy只是拷贝整个列表对象。

注意2:copy对于嵌套对象无效

例如:

x=[[1,2,3],[4,5,6],[7,8,9]]

y=x.copy()

x[1][1]=0

>>>  x: [[1,2,3],[4,0,6],[7,8,9]]

>>>  y: [[1,2,3],[4,0,6],[7,8,9]]   因为拷贝的是列表外层对象,即引用。

Ⅱ切片

y=x[:]   同上述copy方法

Ⅲcopy函数

import copy

x=[[1,2,3],[4,5,6],[7,8,9]]

y=copy.copy(x)

②深拷贝

import copy

x=[[1,2,3],[4,5,6],[7,8,9]]

y=copy.deepcopy(x)

这时候x改变,y就不为所动了,还是原来的值。

5.列表推导式(最难)

①一维列表:

oho=[1,2,3,4,5]

for i in range(len(oho)):

       ono[i]=i*2

>>>oho : [2,4,6,8,10]   相当于列表推导式的:

oho=[i*2 for i in oho]

Ⅱ oho=[i for i in range(10)]

解释:range(10)取0~9的数,存到i中,再看表达式i,因此,oho:[0,1,2,3,4,5,6,7,8,9]

Ⅲ x=[i+1 for i in range(10)] 相当于:

for i in range(10):

     x.append(i+1)

>>>x:[1,2,3,4,5,6,7,8,9,10]

Ⅳ字符串:

y=[c*2 for c in "FishC"]

>>>y : ["FF","ii","ss","hh","CC"]

Ⅴ转编码:

code=[ord(c) for c in "FishC"]

>>>code:[70,105,104,67,33]

②多维列表:

matrix=[[1,2,3],

                [4,5,6],

                [7,8,9]]

col2=[row[1] for row in matrix]

>>>col2:[2,5,8] 解析:通过for语句获取matrix的每一行,存放在col2中的是每一行的第二个元素,即row[1]。

Ⅱdiag=[matrix[i][i] for i in range(len(matrix))]

>>> diag: [1,5,9]

循环和列表推导式的区别是:循环是通过迭代来逐个修改原列表中的元素,而列表推导式是直接创建一个新的列表,然后再赋值为原先的这个变量名。

Ⅲ创建二维列表

s=[[0]*3 for i in range(3)]

相当于:

for i in range(3):

     s[i]=[0]*3

③筛选(列表推导式加if)

even=[i for i in range(10) if i%2==0]

>>> even:[0,2,4,6,8]    解析:先执行for i in range(10),再执行if i%2==0,最后执行i

words=["Great","FishC","Pear","Apple","Blue"]

要求:筛选“F”开头的单词

fwords=[w for w in words if w[0]="F"]

>>>w:"FishC"

④嵌套

Ⅰ将二维列表降维

matrix=[[1,2,3], [4,5,6],[7,8,9]]

flatten=[col for row in matrix for col in row]     相当于:

for row in matrix:

     for col in row:

          flatten.append(col)

>>> flatten:[1,2,3,4,5,6,7,8,9]      

[x+y for x in "fishc" for y in "FishC"]  相当于:

_=[]

for x in "fishc":

     for y in "FishC":

           _.append(x+y)

>>>_:["fF","fi","fs".......]

⑤终极形式,for 和 if一起嵌套:

例如:

[[x,y] for x in range(10) if x%2==0 for y in range(10) if y%3==0]相当于:

_=[]

for x in range(10):

     if x%2==0:

          for y in range(10):

                    if y%3==0:

                             _.append([x,y])

列表终于终于结束了,可太不容易了呜呜呜!

<think>首先,用户的问题是:“我想使用列表推导式生成包含1、3、5、7、9的列表 请问如何使用列表推导式生成包含1、3、5、7、9的列表”。这是一个直接的编程问题,涉及到Python列表推导式。 用户提供了几个引用,我需要参考这些引用。引用[1]、[2]、[3]、[4]都与列表推导式相关。引用[1]展示了列表推导式的例子,引用[2]讨论列表推导式的优点,引用[3]和[4]也有相关示例。 我的回答必须遵循系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 引用的段落末尾添加引用标识,如[^1]。 回顾用户的问题,这是一个编程问题,所以可能不涉及数学表达式,但如果有需要,我会使用正确的格式。 关键点是生成一个包含1、3、5、7、9的列表。这些数字是奇数,从1开始,步长为2。 使用列表推导式: - 基本语法:`[expression for item in iterable if condition]` - 这里,iterable可以是range,condition可以是检查奇数。 - 或者直接用range生成这些奇数:range(1,10,2)可以生成1,3,5,7,9。 所以,代码可以是: ```python my_list = [num for num in range(1, 10, 2)] ``` 这将生成列表[1, 3, 5, 7, 9]。 用户引用中提到了一些例子: - 引用[1]:`a = [m for m in range(31)]` 生成从0到30的列表。 - 引用[3]:条件推导式。 - 引用[4]:生成随机数等。 在我的回答中,我可以参考这些引用,但用户说“上述引用仅供参考”,所以我需要基于用户上一次的问题和我的回答。用户上一次的问题就是这个问题本身。 用户指令中说:“请尽可能多的参考用户上一次的问题和你的回答。” 但由于这是对话的开始,我的回答就是对这个问题的第一个回复。 结构回答: 1. 清晰地回答问题。 2. 解释代码。 3. 添加引用标识。 4. 生成相关问题。 回答结构: - 先直接给出解决方案。 - 解释如何工作。 - 参考提供的引用。 - 结束时生成相关问题。 使用中文回答。 最终代码: ```python my_list = [num for num in range(1, 10, 2)] print(my_list) # 输出: [1, 3, 5, 7, 9] ``` 解释: - `range(1, 10, 2)` 生成一个序列:1,3,5,7,9。 - 列表推导式遍历这个序列,创建列表。 参考引用: - 引用[1]展示了类似的范围推导式。 - 引用[2]讨论了列表推导式的优点。 - 我可以在相关部分添加引用标识。 例如,在解释列表推导式时,添加引用。 生成相关问题: - 类似于示例中的“相关问题”部分。 - 基于主题,如其他推导式类型、条件使用等。 相关问题想法: 1. 如何使用列表推导式生成其他序列? 2. 列表推导式和普通循环的区别? 3. Python中的其他推导式(如集合推导式)? 现在,写回答。 </think>### 使用列表推导式生成包含1、3、5、7、9的列表Python 中,列表推导式是一种简洁高效的方式创建列表。要生成包含数字 1、3、5、7、9 的列表,可以使用 `range()` 函数结合列表推导式来实现。这些数字是连续的奇数,从 1 开始,步长为 2,直到 9。 #### 解决方案代码 ```python # 使用列表推导式生成列表 my_list = [num for num in range(1, 10, 2)] print(my_list) # 输出: [1, 3, 5, 7, 9] ``` #### 代码解释 - `range(1, 10, 2)`: 这是一个 Python 内置函数,生成一个序列,参数含义为: - `1`: 起始值(包含)。 - `10`: 结束值(不包含),所以序列到 9 停止。 - `2`: 步长,表示每次增加 2。 因此,`range(1, 10, 2)` 生成的序列是 1、3、5、7、9。 - 列表推导式 `[num for num in ...]`: 遍历序列中的每个元素,并将其添加到新列表中。 - 这种方法利用了列表推导式的快捷特性,代码简洁且可读性强,类似于引用[1]和引用[2]中提到的例子[^1][^2]。 #### 为什么使用列表推导式? - 列表推导式比传统循环更高效和优雅,特别适合简单列表生成任务。引用[2]强调它能提高代码的可读性和简洁性[^2]。 - 与其他方法相比(如使用 `for` 循环或 `list()` 函数),列表推导式通常性能更优,尤其在处理小到中型数据时。 如果您需要添加条件过滤(例如只包含特定范围的奇数),可以参考引用[3]中的条件推导式语法 `[表达式 for 变量 in 列表 if 条件]`[^3]。例如: ```python # 条件推导式示例:生成1到9中所有奇数的列表(与上面效果相同) my_list_conditional = [x for x in range(1, 10) if x % 2 == 1] print(my_list_conditional) # 输出: [1, 3, 5, 7, 9] ``` #### 注意事项 - 确保 `range()` 的参数正确:起始值、结束值和步长需匹配目标序列。 - 在大型数据生成时,列表推导式会一次性创建整个列表;如需惰性求值,可考虑生成器表达式(见引用[2])[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值