Python 3.x和Python 2.x的内置函数range()的区别

本文详细解析了Python3中range()函数的行为变化及其与Python2的区别,重点阐述了range()返回range对象而非列表的问题,并提供了通过list()函数进行转换的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0 问题描述

学习Numpy时,有一段Python和Numpy的对比,其中一段代码如下:

# code_1
# Python版本: 3.5.2
# 操作系统: Ubuntu 16.04
def pythonsum(n):
	a = range(n)
	b = range(n)
	c = []
	for i in range(len(a)):
		a[i] = i ** 2
		b[i] = i ** 3
		c.append(a[i] + b[i])
	return c

运行提示错误
TypeError: ‘range’ object does not support item assignment

经搜索查阅,这是Python版本问题导致的。
我当前的Python版本为3.5.2



1 知识点

Python 2中,range()返回一个整数列表(list),代码示例如下:

# code_2
# Python版本: 2.7.12
# 操作系统: Ubuntu 16.04
>>> range(5)
[0, 1, 2, 3, 4]
>>> range(0,5)
[0, 1, 2, 3, 4]
>>> range(0,10,2)
[0, 2, 4, 6, 8]

Python 3中,range()返回一个range对象(object),代码示例如下:

# code_3
# Python版本: 3.5.2
# 操作系统: Ubuntu 16.04
>>> range(5)
range(0, 5)
>>> range(0,5)
range(0, 5)
>>> range(0,5,1)
range(0, 5)
>>> range(0,10,2)
range(0, 10, 2)

因此code_1中的a和b为range对象,所以后面的a[i] = i ** 2b[i] = i ** 3就出错了。



2 解决办法

在Python3中,如果想利用range()函数生成列表,可以利用list()函数将range对象强制转换为list类型,代码如下:

# code_4
# Python版本: 3.5.2
# 操作系统: Ubuntu 16.04
>>> range(5)
range(0, 5)
>>> list(range(5))
[0, 1, 2, 3, 4]

所以code_1修改如下:

# code_5
# Python版本: 3.5.2
# 操作系统: Ubuntu 16.04
def pythonsum(n):
	a = list(range(n))
	b = list(range(n))
	c = []
	for i in range(len(a)):
		a[i] = i ** 2
		b[i] = i ** 3
		c.append(a[i] + b[i])
	return c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万俟淋曦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值