python:range函数的使用,以及将结果转列表list,或转numpy数组

Python range()函数详解
本文详细介绍了Python内置函数range()的使用方法,包括其参数设置、返回类型以及如何将其转换为列表或numpy数组。通过多个实例展示了从基本使用到高级应用的全过程。

range

所属模块:内置

功能:创建一个等差数列


该网站可在线查询本文代码中绝大部分函数,以便您能快速理解本文代码:http://kakazai.cn/index.php/Kaka/Python/python

实例1:range的各种参数

#!/usr/bin/3
#code-(3.6)
list1 = range(12)  # 从 0 开始到 12,步长为1
print(list1)
list2 = range(1,12) # 从 1 开始到 12,步长为1
print(list2)
list3 = range(0, 30, 5) # 步长为 5,步长为5
print(list3)
list4 = range(0, -10, -1)   #从0到-10,步长为负数
print(list4)

函数说明

#函数中的参数的值均为默认的参数值
range(start, stop[, step])

返回值说明

返回值的类型不是列表,而是<class 'range'>。可用list函数将其转化为列表。用numpy.array函数将其转化为数组。

参数说明

start    计数从 start 开始。默认是从 0 开始。例如range5)等价于range05;
stop     计数到 stop 结束,但不包括 stop。例如:range05) 是[0, 1, 2, 3, 4]没有5
step     步长,默认为1。例如:range05) 等价于 range(0, 5, 1)

实例2:将range转化为列表

#!/usr/bin/3
#code-(3.6)
r = range(12)  # 从 0 开始到 12,步长为1
print(type(r))  #类型不是列表,是<class 'range'>
print(r)    #range(0, 12)

l = list(r) #转化为列表
print(type(l))  #类型是列表,<class 'list'>
print(l)  #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

实例3:将range转化为numpy数组

#!/usr/bin/3
#code-(3.6)
import numpy as np
r = range(12)  # 从 0 开始到 12,步长为1
print(type(r))  #类型不是列表,是<class 'range'>
print(r)    #range(0, 12)

a = np.array(r) #转化为数组
print(type(a))  #类型是numpy数组,<class 'numpy.ndarray'>
print(a)  #[ 0  1  2  3  4  5  6  7  8  9 10 11]

<think>我们被要求解释Python列表list)和NumPy数组(ndarray)之间的区别。根据引用[1][2][3][4],我们可以总结出以下几点: 1. **存储数据类型**: - **列表list)**:可以存储不同类型的元素(例如字符串、整数、浮点数混合)[^2][^3]。 - **NumPy数组(ndarray)**:要求所有元素必须是同一种数据类型(例如全部是整数全部是浮点数)[^4]。 2. **内存效率**: - **列表**:由于可以存储不同类型,每个元素需要存储其类型信息,因此内存占用较大[^2]。 - **NumPy数组**:由于类型一致,数据在内存中连续存储,因此内存占用小,且支持向量化操作[^1][^4]。 3. **性能**: - **列表**:执行循环操作(如遍历)较慢,因为需要检查每个元素的类型。 - **NumPy数组**:底层使用C语言实现,支持向量化运算(整个数组的操作无需显式循环),因此计算速度快[^1]。 4. **功能**: - **列表**:内置类型,无需导入模块,支持多维表示(嵌套列表),但多维操作需要嵌套循环,不够直观[^2][^3]。 - **NumPy数组**:提供了丰富的数学函数(如线性代数、傅里叶变换等)和便捷的多维数组操作(如切片、索引、广播机制)[^1][^4]。 5. **换**: - 列表可以换为NumPy数组:`numpy.array(list)`[^1]。 - NumPy数组可以换为列表:`ndarray.tolist()`[^1]。 6. **应用场景**: - **列表**:适合存储不同类型的数据,者进行简单的数据操作。 - **NumPy数组**:适合数值计算、科学计算、机器学习等需要高性能和大规模数据处理的场景。 下面用数学公式和代码示例进一步说明: ### 内存布局示例 列表的内存布局是非连续的,而NumPy数组是连续的。 列表:$ \text{内存地址} = [\text{地址1}, \text{地址2}, \text{地址3}] $(每个元素独立存储) NumPy数组:$ \text{内存地址} = \text{基地址} + \text{偏移量} $(连续存储) ### 向量化运算示例 对于两个数组相加: - 使用列表:需要循环 ```python a = [1, 2, 3] b = [4, 5, 6] c = [a[i] + b[i] for i in range(len(a))] ``` - 使用NumPy:直接向量化运算 ```python import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = a + b # 无需循环,速度快 ``` ### 多维数组操作 - 列表嵌套:访问二维列表的元素需要两层索引 ```python l_2d = [[0,1,2],[3,4,5]] print(l_2d[0][1]) # 输出1 ``` - NumPy数组:支持多维索引和切片 ```python import numpy as np arr_2d = np.array([[0,1,2],[3,4,5]]) print(arr_2d[0, 1]) # 输出1 print(arr_2d[:, 1]) # 输出[1, 4](第二列) ``` ### 总结 | 特性 | Python列表list) | NumPy数组(ndarray) | |--------------|-------------------|---------------------| | 数据类型 | 可以不同 | 必须相同 | | 内存占用 | 较大 | 较小 | | 性能 | 较慢 | 较快(向量化) | | 功能 | 基础操作 | 丰富数学函数 | | 多维操作 | 嵌套列表 | 多维数组支持 | | 适用场景 | 通用数据存储 | 科学计算 | ### 参考文献 [^1]: 20_NumPy数组ndarray和Python标准列表相互换 [^2]: 48_Python列表数组numpy.ndarray的区别和使用方法 [^3]: 23_Python列表数组以及numpy.ndarray的区别和正确使用 [^4]: NumPy与ndarray简介 §§相关问题§§ 1. 在什么情况下应该使用列表而不是NumPy数组? 2. 如何将嵌套列表换为NumPy多维数组? 3. NumPy数组的广播机制是什么? 4. 为什么NumPy数组在科学计算中如此重要?</think>### Python列表list)与NumPy数组(ndarray)的区别 #### 1. **数据类型要求** - **列表**:可存储任意混合类型的数据 ```python py_list = ["apple", 100, 3.14] # 有效 ``` - **NumPy数组**:所有元素必须是**同一种数据类型** ```python import numpy as np np_array = np.array([1, 2, 3]) # 整型数组 (int32/int64) np_float = np.array([1.0, 2, 3]) # 自动为浮点型 (float64) ``` #### 2. **内存布局与性能** - **列表**: - 内存非连续存储 - 元素存储指针和类型信息 - 计算需逐元素处理,**速度慢** $$ \text{内存占用} = \sum(\text{元素大小} + \text{元数据开销}) $$ - **NumPy数组**: - 内存连续存储 - 固定数据类型减少元数据 - **向量化运算**支持并行计算 $$ \text{内存占用} = n \times \text{数据类型大小} $$ ```python # 向量化运算示例 a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = a * b # 直接计算:[4, 10, 18] ``` #### 3. **功能特性** | 特性 | 列表 | NumPy数组 | |--------------|--------------------------------|------------------------------| | **维度支持** | 嵌套列表模拟多维(如`[[1,2],[3,4]]`) | 原生支持多维数组(ndarray) | | **数学运算** | 需手动循环实现 | 内置矩阵运算、线性代数等 | | **广播机制** | 不支持 | 自动扩展维度进行计算 | | **切片操作** | 基础切片 | 支持高级索引和布尔索引 | #### 4. **应用场景** - **优先用列表**: - 存储异构数据(文本+数值) - 简单数据收集(<1000元素) - 不需要数学运算的场景 - **优先用NumPy数组**: - 科学计算/数值分析 - 机器学习数据集(图像/音频矩阵) - 大数据处理(>10,000元素) - 需要线性代数运算(如矩阵乘法) #### 5. **相互换** ```python # 列表NumPy数组 py_list = [1, 2, 3] np_array = np.array(py_list) # [1, 2, 3] # NumPy数组列表 new_list = np_array.tolist() # [1, 2, 3] ``` #### 性能对比实验 ```python import time import numpy as np # 创建10万个元素 py_list = list(range(100000)) np_array = np.arange(100000) # 列表计算时间 start = time.time() result = [x*2 for x in py_list] print(f"列表耗时: {time.time()-start:.5f}s") # NumPy计算时间 start = time.time() result = np_array * 2 print(f"NumPy耗时: {time.time()-start:.5f}s") ``` 输出示例: ``` 列表耗时: 0.01562s NumPy耗时: 0.00012s # 快100倍以上 ``` > 关键结论:NumPy数组在**数值计算**和**大数据处理**中性能优势显著,而列表在**异构数据存储**和**简单操作**中更灵活[^1][^2][^3][^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值