,,Python中range函数的使用方法

,,Python中range函数的使用方法

本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: