本文主要介绍Python中range函数的使用。文章基于Python3环境扩展了range函数的使用,有一定的参考价值,有需要的朋友可以参考一下。
目录
1、什么是range()函数?2.语法格式3。错误报告问题4。range()函数要注意5。range对象是不可变序列6。range函数实现反向遍历7。清单8的使用。范围功能前言:的总结。
基于Python3环境,Python2环境中的范围会有所不同,但不会影响我们的使用。
1、range()函数是什么?
range()函数是python的内置函数。它可以返回一系列连续相加的整数,并生成一个list对象。
它们中的大多数经常出现在for循环中,可以在for循环中用作索引。
小题练手:用于.靶场练习
1:使用for循环和range找出0 ~ 100内的所有偶数,并将它们追加到一个列表中。
list1=[]
对于范围(0,100,2)内的I:
list1.append(i)
打印(列表1)
2.使用for循环和range查找0 ~ 50内可被3整除的数,并将其添加到列表中。
list2=[]
对于范围(0,50)内的j:
如果j%3==0:
list2.append(j)
打印(列表2)
3:利用for循环和range找到0 ~ 50内能被3整除的数,插入到列表中的第0个索引位置。最终结果如下:[48,45,42.]
list3=[]
对于范围(0,50)内的k:
如果k%3==0:
list3.insert(0,k)
打印(列表3)
4:找到列表li中的元素,去掉每个元素前后的空格,找出以“A”开头的元素,添加到一个新列表中,最后循环打印这个新列表。
li=['alexC ',' AbC ',' egon ',' riTiAn ',' WuSir ',' aqc']' ' '
li=['alexC ',' AbC ',' egon ',' riTiAn ',' WuSir ',' aqc']
li1=[]
李对米睿道:
b=m.strip()。开头为(' a ')
如果b==真:
li1.append(m.strip())
对于li1中的n:
打印(n)
2、语法格式
范围(开始、停止[、步进])
参数介绍:
Start是指计数的起始值,可以省略不写。默认值为0;Stop是指计数结束值,但不包括stop;Step是步长,默认为1,不能为0。
(特别注意:如果有三个参数,那么最后一个参数表示为步长。)
ps1:只有一个参数:0到该参数中的所有整数,不包括参数本身。
ran=范围(6)
#定义一个列表并将该范围内的所有数字存储在列表中。
arry_list=list(ran)
打印(冉)
打印(arry_list)
#运行结果如下
范围(0,6)
[0, 1, 2, 3, 4, 5]
ps2:
当range函数有两个参数时,第一个参数表示左边界,第二个参数表示右边界,包括左边但不包括右边。
ran_new=range(1,8)
List_one=list(ran_new) #将区域中的所有数据存储在列表中
打印(list_one)
#运行结果
[1, 2, 3, 4, 5, 6, 7]
ps3:
range包含三个参数时,第一个表示左边界,第二个表示右边界,第三个表示步长,即两个整数之差,含左不含右。
当# range包含三个参数时,第一个表示左边界,第二个表示右边界,第三个表示步长,即两个整数之差,含左不含右。
ran_two=range(1,16,2)
list_two=list(ran_two)
# list_two=
打印(ran_new)
打印(第二批)
打印(列表_二)
运行结果为:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
范围(1,16)
范围(1,16,2)
[1, 3, 5, 7, 9, 11, 13, 15]
实例:
Print('示例1:起始值为1,结束值为10 ')
对于范围(1,10)内的I:
print(i,end=' ')
打印(' \ n示例2:最终值是10 ')
对于范围(10)中的I:print(I,end=' ')
打印(' \ n示例3:最终值为10,步长为2 ')
对于范围(1,10,2)内的I:
print(i,end=' ')
运行结果:
例1:起始值为1,结束值为10123456789。例2:结束值为100123456789。例3:结束值为10,步长为213579。
3、报错问题
(1)错误报告:type error:“list”对象不可调用。
指的是报错类型:不能调用“列表”对象
原因:
由于变量列表与函数列表同名,当函数使用列表函数时,发现该列表是一个已定义的列表,无法调用该列表,于是抛出类型错误。所以我们以后定义变量的时候,要避免函数名,方法名,关键字的重复,任何语言都是如此。
(2)如果range函数报错:
TypeError: ' float '对象不能解释为整数?
原因是range只能生成整数,不能生成浮点类型。使用numpy的arange函数求解:
将numpy作为np导入
对于np.arange(0.1,0.5,0.05)中的I:
打印(i) # 0.1、0.15、0.2、0.4,0.45,不含0.5!
#或l=list(np.arange(0.1,0.5,0.05))
4、range()函数需要注意的
(1)它代表左闭右开区间;
它接收的参数必须是整数、负数,不能是浮点数等类型;
''确定指定的整数是否存在于序列中,而不是'''
Print(10 in r) #False,10不在r的当前整数序列中。
Print(9 in r) #true,9在当前R序列中
Print(9不在R中)#false,9不在当前R序列中
是不可变的序列类型,可以判断元素、查找元素、切片等,但不能修改元素;
它是迭代对象,但不是迭代器。
# (1)左侧关闭,右侧打开
对于范围(3,6)内的I:
print(i,end=' ')3 4 5
# (2)参数类型
对于范围(-8,-2,2)内的I:
print(i,end=' ')-8-6-4 range(2.2)-type error trace back(最近一次调用last).类型错误:
“float”对象不能解释为整数
# (3)顺序操作
b=range(1,10) b[0]1 b[:-3]range(1,7)b[0]=2类型错误回溯(最近一次调用最后一次).类型错误:
“范围”对象不支持项目分配
# (4)不是迭代器
hasattr(range(3),' __iter__')True
hasattr(range(3),' _ _ next _ _ ')False has attr(ITER(range(3),' __next__')True
5、range对象是不可变序列
——中有三种基本类型的序列,官方是这样划分的:链表、元组、范围对象。
(有三种基本的序列类型:列表、元组和范围对象。)
类型范围是与列表和元组状态相同的基本序列!那 range 序列跟其它序列类型有什么差异呢?
普通序列支持12种运算,范围序列只支持10种,不支持加法拼接和乘法重复。
range(2) range(3) -类型错误回溯(最近一次调用).类型错误:不支持的操作数类型
for : 'range '和' range ' range(2)* 2-type error trace back(最近一次调用最后一次).类型错误:不支持的操作数类型
for *: 'range '和' int '
那么问题来了:也是不可变的序列。为什么字符串和元组支持以上两种运算,而范围序列不支持?
虽然不可变序列不能直接修改,但是我们可以把它们复制到新的序列中进行操作。为什么range object连这个都不支持?
官方文档的解释:
.因为range对象只能表示遵循严格模式的序列,而重复和连接通常会违反该模式。
原因是range对象只代表一个遵循严格模式的序列,重复和拼接通常会破坏这种模式。
问题的关键在于范围序列的模式!仔细想想,它其实代表的是一个等差数列,拼接两个等差数列,或者重复拼接一个等差数列,这就是range类型不支持这两种运算的原因。可以推断,其他修改动作也会破坏等差数列的结构,所以干脆不要修改。
【range类型的优点】
无论range对象表示的整数序列有多长,所有的range对象都占用相同的内存空间,因为只需要存储start、stop和step。只有在使用range对象时,才会计算序列中的相关元素。
6、range函数实现逆序遍历
实现反向遍历的range函数的两种实现方法
1)首先创建一个列表,然后反转列表中元素的顺序。
例如:a=范围(4)
a=range(4) # [0,1,2,3]new=[]for i in reversed(a):
new.append(i)print(new) # [3,2,1,0]
2)直接使用range()函数完成逆序遍历。
//第三个参数表示100次执行的所有操作,每次加-1,直到0,I在范围(100,0,-1)内:
打印(一)
7、与列表list的使用
List1=['看不见','看见你','笑','我该怎么做','睡觉','起床','走路']
对于范围内的I(len(list 1)):
print(i,list1[i])
运行结果:
【range与list的区别】
Range()是按顺序排列的数值,通常与for循环一起使用。例如,for范围中的每个(0,5):for循环执行五次,每个值都是04。而list()就是把一个字符串转换成一个列表,比如A=' 01234 ',B=List (A)。a打印出来会是一个列表:['0 ',' 1 ',' 2 ',' 3 ',' 4'],比如a=[0,1,2,3,4]
#将范围与列表进行比较
对于范围(0,5)内的I:
打印(一)
a=[0,1,2,3,4]
打印(一份)
8、关于range函数小结
(1)1)range对象并不难使用和理解,但是在python中非常常用!(2)2)range对象既不是函数,也不是迭代器,所以可以称为“懒序列”;(3)参数说明:start是区间的起点,stop是区间的终点,step是步长;(4)range对象通常与for循环一起使用;(range对象可以被索引;
关于range()函数还有一点需要注意:range()方法只生成可迭代的对象,不生成迭代器!(在Python2中,range()生成一个列表,而本文基于Python3,生成一个迭代器。)可以得到迭代器的内置方法有很多,比如zip()、enumerate()、map()、filter()和reversed()等。但是很少有像range()这样只获取iterable对象的方法。
在for- loop遍历中,迭代器和迭代器的性能是一样的,即都是惰性求值,在空间复杂度和时间复杂度上没有区别。两者的区别总结如下:相同的是可以惰性迭代,不同的是iterable对象不支持自遍历(即next()方法),而迭代器本身不支持切片(即__getitem__()方法)。虽然有这些区别,但是很难断定哪个更好。
那为什么迭代器是为所有五个内置方法设计的,而iterable对象是为range()方法设计的呢?把他们都统一起来不是更好吗?事实上,Pyhton为了标准化已经做了很多这样的事情。比如Python2有两个方法,range()和xrange(),Python3杀死了其中一个。为什么不更规范点,令 range() 生成的是迭代器呢?
这个问题看到有大佬说的比较好的观点,这里引用一下:
zip()等方法都需要接收某些iterable对象的参数,这是一个对它们进行再处理的过程。所以,他们也想立刻产生一定的结果,所以Python开发者把这个结果设计成了迭代器。
这也有一个好处,当作为参数的iterable对象改变时,结果迭代器不会被错误地使用,因为它是消耗性的。
range()方法不同。它接收的参数不是迭代的对象,而是一个初始处理的过程。因此,它被设计为迭代对象,可以直接使用或用于其他再处理目的。
例如,zip()这样的方法可以完全接收range类型的参数。
对于zip中的I(范围(1,6,2),范围(2,7,2)):
print(i,end='')(1,2)(3,4)(5,6)
也就是说,range()方法是一个初级生产者,它生产的原料有很大的用处。过早把它变成迭代器无疑是画蛇添足的行为。其实range对象是什么并不那么重要,如何使用才是我们最应该关注的。
关于Python中range函数使用的这篇文章到此为止。有关Python range函数的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。