python range() 函数可创建一个整数列表,一般用在 for 循环中。
语法:
range(start, stop[, step])
参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0,5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0,5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0,5) 等价于 range(0, 5, 1)
对于 range() 函数,有几个注意点:
(1)它表示的是左闭右开区间;
(2)它接收的参数必须是整数,可以是负数,但不能是浮点数等其它类型;
(3)它是不可变的序列类型,可以进行判断元素、查找元素、切片等操作,但不能修改元素;
(4)它是可迭代对象,却不是迭代器。
for i in range(2,11,2):
print(i)
输出:
2
4
6
8
10
还可以递减输出
for i in range(11,1,-4):
print(i)
输出:
11
7
3
创建数字列表:
使用list()函数将range()的结果直接转化成列表。
print(list(range(2,11,2)))
输出:
[2,4,6,8,10]
遍历一个列表list:
list=[1,2,3,4,5,6,7]
for i in range(len(list)):
print(list[i])
输出:
1
2
3
4
5
6
7
range()函数能够创建任何需要的数字集,创建一个包含前10个整数的平方。
squares=[] #创建一个空列表
for value in range(1,11):
square=value**2 #square临时变量
squares.append(square) #append()函数增加列表元素
print(squares) #此处不需要缩进
输出:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
为了使代码更加简洁,可以选择不使用临时变量square
squares=[]
for in vaue range(1,11):
squares.append(value**2)
print(squares)
range()函数的不可修改性
三种基本序列类型:列表(list)、元组(tup)、范围对象(range)。range是和列表与元组有着相同地位的基础序列。除了range,字符串也是不可改变的序列类型。
range序列的特殊性:
普通序列支持12种操作,range只支持10种,不支持进行加法拼接和乘法重复。
range(2)+range(3)
TypeError: unsupported operand type(s) for +: 'range' and 'range'
range(2)*2
TypeError: unsupported operand type(s) for *: 'range' and 'int'
那么问题来了:同样是不可变序列,为什么字符串和元组就支持上述两种操作,而偏偏 range 序列不支持呢?虽然不能直接修改不可变序列,但我们可以将它们拷贝到新的序列上进行操作啊,为何 range 对象连这都不支持呢?
官方的回答:
…due to the fact that range objects can only represent sequences that follow a strict pattern and repetition and concatenation will usually violate that pattern.
原因是 range 对象仅仅表示一个遵循着严格模式的序列,而重复与拼接通常会破坏这种模式…
问题的关键就在于 range 序列的 pattern,它表示的就类似于等差数列,拼接两个等差数列,或者重复拼接一个等差数列,其它修改动作也会破坏等差数列结构,所以这就是为啥 range 类型不支持这两个操作的原因了。
领取专属 10元无门槛券
私享最新 技术干货