range_ranges - CSDN
range 订阅
range是一种计算机术语,在Excel中,Range集合代表某一单元格、某一行、某一列、某一选定区域(该区域可包含一个或若干连续单元格区域),或者某一三维区域。可用 Range(arg)(其中 arg 为区域名称)来返回代表单个单元格或单元格区域的 Range 对象。另外有同名汽车。 展开全文
range是一种计算机术语,在Excel中,Range集合代表某一单元格、某一行、某一列、某一选定区域(该区域可包含一个或若干连续单元格区域),或者某一三维区域。可用 Range(arg)(其中 arg 为区域名称)来返回代表单个单元格或单元格区域的 Range 对象。另外有同名汽车。
信息
代    表
某一单元格、某一行
属    性
Cells 属性
外文名
range
方    法
Union 方法
rangeRange 属性
range() 函数创建并返回一个包含指定范围的元素的数组。使用格式为range(first,second,step),该函数创建一个数组,包含从 first 到 second (包含 first 和 second)之间的整数或字符。如果 second 比 first 小,则返回反序的数组。可用 Range(arg)(其中 arg 为区域名称)来返回代表单个单元格或单元格区域的 Range 对象。下例将单元格 A1 中的值赋给单元格 A5。Worksheets("Sheet1").Range("A5").Value = Worksheets("Sheet1").Range("A1").Value下例设置单元格区域 A1:H8 中每个单元格的公式,用随机数填充该区域。在没有对象识别符(句号左边的对象)的情况下,使用 Range 属性将返回活动表上的一个区域。如果活动表不是工作表,则该方法无效。在没有明确的对象识别符的情况下,使用 Range 属性之前,可用 Activate 方法来激活工作表。Worksheets("Sheet1").ActivateRange("A1:H8").Formula = "=Rand()" 'Range is on the active sheet下例清除区域 Criteria 中的内容。Worksheets⑴.Range("Criteria").ClearContents如果用文本参数指定区域地址,必须以 A1 样式记号指定该地址(不能用 R1C1 样式记号)。
收起全文
  • - `range()`返回的是`range object`,而`np.numpy()`返回的是`numpy.ndarray()` -`range()`不支持步长为小数,`np.arange()`支持步长为小数 - 两者都可用于迭代
    • range()返回的是range object,而np.arange()返回的是numpy.ndarraytype(np.arange(10)) == np.ndarray

      • 两者都是均匀地(evenly)等分区间;
      • range尽可用于迭代,而np.arange作用远不止于此,它是一个序列,可被当做向量使用。
    • range()不支持步长为小数,np.arange()支持步长为小数

    • 两者都可用于迭代

    • 两者都有三个参数,以第一个参数为起点,第三个参数为步长,截止到第二个参数之前的不包括第二个参数的数据序列
      某种意义上,和STL中由迭代器组成的区间是一样的,即左闭右开的区间。[first, last)或者不加严谨地写作[first:step:last)

    >>>range(1,5)
    range(1,5)
    >>>tuple(range(1, 5))
    (1, 2, 3, 4)
    >>>list(range(1, 5))
    [1, 2, 3, 4]
    
    
    >>>r = range(1, 5)
    >>>type(r)
    <class 'range'>
    
    >>>for  i in range(1, 5):
    ...    print(i)
    1
    2
    3
    4
    
    >>> np.arange(1, 5)
    array([1, 2, 3, 4])
    
    >>>range(1, 5, .1)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'float' object cannot be interpreted as an integer
    
    >>>np.arange(1, 5, .5)
    array([ 1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5])
    
    >>>range(1, 5, 2)
    >>>for i in range(1, 5, 2):
    ...    print(i)
    1
    3
    
    >>for i in np.arange(1, 5):
    ...    print(i)
    1
    2
    3
    4
     
    
    展开全文
  • 迭代器是 23 种设计模式中最常用的一种(之一),在 Python 中随处可见它的身影,我们经常用到它,但是却不一定意识到...在系统学习迭代器之前,我一直以为 range() 方法也是用于生成迭代器的,现在却突然发现,它生...

    迭代器是 23 种设计模式中最常用的一种(之一),在 Python 中随处可见它的身影,我们经常用到它,但是却不一定意识到它的存在。在关于迭代器的系列文章中(链接见文末),我至少提到了 23 种生成迭代器的方法。有些方法是专门用于生成迭代器的,还有一些方法则是为了解决别的问题而“暗中”使用到迭代器。

    在系统学习迭代器之前,我一直以为 range() 方法也是用于生成迭代器的,现在却突然发现,它生成的只是可迭代对象,而并不是迭代器! (PS:Python2 中 range() 生成的是列表,本文基于Python3,生成的是可迭代对象)

    于是,我有了这样的疑问:为什么 range() 不生成迭代器呢?在查找答案的过程中,我发现自己对 range 类型的认识存在一些误区。因此,本文将和大家全面地认识一下 range ,期待与你共同学习进步。

    更多Python视频、源码、资料加群683380553免费获取

    1、range() 是什么?

    它的语法:range(start, stop [,step]) ;start 指的是计数起始值,默认是 0;stop 指的是计数结束值,但不包括 stop ;step 是步长,默认为 1,不可以为 0 。range() 方法生成一段左闭右开的整数范围。

    对于 range() 函数,有几个注意点:(1)它表示的是左闭右开区间;(2)它接收的参数必须是整数,可以是负数,但不能是浮点数等其它类型;(3)它是不可变的序列类型,可以进行判断元素、查找元素、切片等操作,但不能修改元素;(4)它是可迭代对象,却不是迭代器。

    2、 为什么range()不生产迭代器?

    可以获得迭代器的内置方法很多,例如 zip() 、enumerate()、map()、filter() 和 reversed() 等等,但是像 range() 这样仅仅得到的是可迭代对象的方法就绝无仅有了(若有反例,欢迎告知)。这就是我存在知识误区的地方。

    在 for-循环 遍历时,可迭代对象与迭代器的性能是一样的,即它们都是惰性求值的,在空间复杂度与时间复杂度上并无差异。我曾概括过两者的差别是“一同两不同”:相同的是都可惰性迭代,不同的是可迭代对象不支持自遍历(即next()方法),而迭代器本身不支持切片(即__getitem__() 方法)。

    虽然有这些差别,但很难得出结论说它们哪个更优。现在微妙之处就在于,为什么给 5 种内置方法都设计了迭代器,偏偏给 range() 方法设计的就是可迭代对象呢?把它们都统一起来,不是更好么?

    事实上,Pyhton 为了规范性就干过不少这种事,例如,Python2 中有 range() 和 xrange() 两种方法,而 Python3 就干掉了其中一种,还用了“李代桃僵”法。为什么不更规范点,令 range() 生成的是迭代器呢?

    关于这个问题,我没找到官方解释,以下纯属个人观点 。

    zip() 等方法都需要接收确定的可迭代对象的参数,是对它们的一种再加工的过程,因此也希望马上产出确定的结果来,所以 Python 开发者就设计了这个结果是迭代器。这样还有一个好处,即当作为参数的可迭代对象发生变化的时候,作为结果的迭代器因为是消耗型的,不会被错误地使用。

    而 range() 方法就不同了,它接收的参数不是可迭代对象,本身是一种初次加工的过程,所以设计它为可迭代对象,既可以直接使用,也可以用于其它再加工用途。例如,zip() 等方法就完全可以接收 range 类型的参数。

    也就是说,range() 方法作为一种初级生产者,它生产的原料本身就有很大用途,早早把它变为迭代器的话,无疑是一种画蛇添足的行为。

    对于这种解读,你是否觉得有道理呢?欢迎就这个话题与我探讨。

    3、range 类型是什么?

    以上是我对“为什么range()不产生迭代器”的一种解答。顺着这个思路,我研究了一下它产生的 range 对象,一研究就发现,这个 range 对象也并不简单。

    首先奇怪的一点就是,它竟然是不可变序列!我从未注意过这一点。虽然说,我从未想过修改 range() 的值,但这一不可修改的特性还是令我惊讶。

    翻看文档,官方是这样明确划分的——有三种基本的序列类型:列表、元组和范围(range)对象。(There are three basic sequence types: lists, tuples, and range objects.)

    这我倒一直没注意,原来 range 类型居然跟列表和元组是一样地位的基础序列!我一直记挂着字符串是不可变的序列类型,不曾想,这里还有一位不可变的序列类型呢。

    那 range 序列跟其它序列类型有什么差异呢?

    普通序列都支持的操作有 12 种。range 序列只支持其中的 10 种,不支持进行加法拼接与乘法重复。

    那么问题来了:同样是不可变序列,为什么字符串和元组就支持上述两种操作,而偏偏 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 类型不支持这两个操作的原因了。由此推论,其它修改动作也会破坏等差数列结构,所以统统不给修改就是了。

    4、小结

    回顾全文,我得到了两个偏冷门的结论:range 是可迭代对象而不是迭代器;range 对象是不可变的等差序列。

    若单纯看结论的话,你也许没有感触,或许还会说这没啥了不得啊。但如果我追问,为什么 range 不是迭代器呢,为什么 range 是不可变序列呢?对这俩问题,你是否还能答出个自圆其说的设计思想呢?(PS:我决定了,若有机会面试别人,我必要问这两个问题的嘿~)

    由于 range 对象这细微而有意思的特性,我觉得这篇文章写得值了。本文是作为迭代器系列文章的一篇来写的,所以对于迭代器的基础知识介绍不多,另外,还有一种特殊的迭代器也值得单独成文,那就是生成器了。

    展开全文
  • for i in range ()作用: range()是一个函数, for i in range () 就是给i赋值: 比如 for i in range (1,3): 就是把1,2依次赋值给i range () 函数的使用是这样的: range(3)即:从1到3,不包含3,即1,2 ...

    for i in range ()作用:

    range()是一个函数, for i in range () 就是给i赋值:
    比如 for i in range (1,3):
    就是把1,2依次赋值给i

    range () 函数的使用是这样的:
    range(start, stop[, step]),分别是起始、终止和步长

    range(3)即:从0到3,不包含3,即0,1,2

    >>> for i in range(3):
    	print(i)
    
    	
    0
    1
    2
    

    range(1,3) 即:从1到3,不包含3,即1,2

    for i in range(1,3):
    	print(i)
    
    	
    1
    2
    

    range(1,3,2)即:从1到3,每次增加2,因为1+2=3,所以输出只有1
    第三个数字2是代表步长。如果不设置,就是默认步长为1

    >>> for i in range(1,3,2):
    	print(i)
    
    
    1
    

    如果改成range(1,5,2),就会输出1和3

    >>> for i in range(1,5,2):
    	print(i)
    
    	
    1
    3
    

    For i in range(100)
    则读取normMat[i,:]样本的编号为:0-99,共100个

    展开全文
  • range函数详解

    2019-11-13 14:48:49
    class range(start, stop[, step]) range 构造器的参数必须为整数(可以是内置的 int 或任何实现了 index 特殊方法的对象)。 如果省略 step 参数,其默认值为 1。 如果省略 start 参数,其默认值为 0,如果 step 为...

    class range(start, stop[, step])

    range 构造器的参数必须为整数(可以是内置的 int 或任何实现了 index 特殊方法的对象)。 如果省略 step 参数,其默认值为 1。 如果省略 start 参数,其默认值为 0,如果 step 为零则会引发 ValueError。

    如果 step 为正值,确定 range r 内容的公式为 r[i] = start + step*i 其中 i >= 0 且 r[i] < stop。

    如果 step 为负值,确定 range 内容的公式仍然为 r[i] = start + step*i,但限制条件改为 i >= 0 且 r[i] > stop.

    如果 r[0] 不符合值的限制条件,则该 range 对象为空。 range 对象确实支持负索引,但是会将其解读为从正索引所确定的序列的末尾开始索引。

    元素绝对值大于 sys.maxsize 的 range 对象是被允许的,但某些特性 (例如 len()) 可能引发 OverflowError。

    一些 range 对象的例子:

    >>>
    >>> list(range(10))
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> list(range(1, 11))
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>> list(range(0, 30, 5))
    [0, 5, 10, 15, 20, 25]
    >>> list(range(0, 10, 3))
    [0, 3, 6, 9]
    >>> list(range(0, -10, -1))
    [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
    >>> list(range(0))
    []
    >>> list(range(1, 0))
    []
    

    range 对象实现了 一般 序列的所有操作,但拼接和重复除外(这是由于 range 对象只能表示符合严格模式的序列,而重复和拼接通常都会违反这样的模式)。

    start
    start 形参的值 (如果该形参未提供则为 0)

    stop
    stop 形参的值

    step
    step 形参的值 (如果该形参未提供则为 1)

    range 类型相比常规 list 或 tuple 的优势在于一个 range 对象总是占用固定数量的(较小)内存,不论其所表示的范围有多大(因为它只保存了 start, stop 和 step 值,并会根据需要计算具体单项或子范围的值)。

    range 对象实现了 collections.abc.Sequence ABC,提供如包含检测、元素索引查找、切片等特性,并支持负索引 (参见 序列类型 — list, tuple, range):

    >>> r = range(0, 20, 2)
    >>> r
    range(0, 20, 2)
    >>> 11 in r
    False
    >>> 10 in r
    True
    >>> r.index(10)
    5
    >>> r[5]
    10
    >>> r[:5]
    range(0, 10, 2)
    >>> r[-1]
    18
    

    使用 == 和 != 检测 range 对象是否相等是将其作为序列来比较。 也就是说,如果两个 range 对象表示相同的值序列就认为它们是相等的。 (请注意比较结果相等的两个 range 对象可能会具有不同的 start, stop 和 step 属性,例如 range(0) == range(2, 1, 3) 而 range(0, 3, 2) == range(0, 4, 2)。)

    在 3.2 版更改: 实现 Sequence ABC。 支持切片和负数索引。 使用 int 对象在固定时间内进行成员检测,而不是逐一迭代所有项。

    在 3.3 版更改: 定义 ‘==’ 和 ‘!=’ 以根据 range 对象所定义的值序列来进行比较(而不是根据对象的标识)。

    3.3 新版功能: start, stop 和 step 属性。

    重点:

    step为负数时,range的前两位注意要反过来,并且第二位只到前一位
    例如range(10,0,-1)
    会出现10-9-8-7-…-3-2-1
    不会出现0,并且大的数字在前

    展开全文
  • http range 用法与说明

    2018-12-11 22:11:02
    HTTP RANGE Range,是在 HTTP/1.1(http://www.w3.org/Protocols/rfc2616/rfc2616.html)里新增的一个 header field,也是现在众多号称多线程...Range 的规范定义如下: ranges-specifier = byte-ranges-specifier...

    HTTP RANGE

    Range,是在 HTTP/1.1(http://www.w3.org/Protocols/rfc2616/rfc2616.html)里新增的一个 header field,也是现在众多号称多线程下载工具(如 FlashGet、迅雷等)实现多线程下载的核心所在。

    Range 的规范定义如下:
    ranges-specifier = byte-ranges-specifier
    byte-ranges-specifier = bytes-unit “=” byte-range-set
    byte-range-set = 1#( byte-range-spec | suffix-byte-range-spec )
    byte-range-spec = first-byte-pos “-” [last-byte-pos]
    first-byte-pos = 1*DIGIT
    last-byte-pos = 1*DIGIT
    (RFC2616 里充斥着这种形式的定义,一开始觉得挺乱,后来习惯了就发现其实挺科学,挺好理解的:))

    值得注意的就是 byte-range-set 是一个 byte-range 的集合,所以在实际请求中完全可能会出现如下这种形式:
    Range: bytes=123-567,789-
    这个数据区间是个闭合区间,起始值是 0,所以“Range: bytes=0-1”这样一个请求实际上是在请求开头的 2 个字节。

    byte-range-spec 里的 last-byte-pos 可以省略,代表从 first-byte-pos 一直请求到结束位置。其实 first-byte-pos 也是可以省略的,只不过就不叫 byte-range-spec 了,而是叫 suffix-byte-range-spec,规范如下:
    suffix-byte-range-spec = “-” suffix-length
    suffix-length = 1*DIGIT
    比如“Range: bytes=-200”,它不是表示请求文件开始位置的 201 个字节,而是表示要请求文件结尾处的 200 个字节。

    如果 byte-range-spec 的 last-byte-pos 小于 first-byte-pos,那么这个 Range 请求就是无效请求,server 需要忽略这个 Range 请求,然后回应一个 200 OK,把整个文件发给 client。
    如果 byte-range-spec 里的 first-byte-pos 大于文件长度,或者 suffix-byte-range-spec 里的 suffix-length 等于 0,那么这个 Range 请求被认为是不能满足的,server 需要回应一个 416 Requested range not satisfiable。

    server 除了要能理解 Range 请求之外,在回应 client 时还要使用 Content-Range 来告诉 client 他到底发送了多少数据,Content-Range 的规范定义如下:
    Content-Range = “Content-Range” “:” content-range-spec
    content-range-spec = byte-content-range-spec
    byte-content-range-spec = bytes-unit SP byte-range-resp-spec “/” ( instance-length | “*” )
    byte-range-resp-spec = (first-byte-pos “-” last-byte-pos) | “*”
    instance-length = 1*DIGIT

    详尽的细枝末节就不在这里记述了,举个例子说明一下,比如某文件的大小是 1000 字节,client 请求这个文件时用了 “Range: bytes=0-500”,那么 server 应该把这个文件开头的 501 个字节发回给 client,同时回应头要有如下内容:
    Content-Range: bytes 0-500/1000

    Range 请求的一些注意事项:
    1) 不支持 Range 请求的 server 要用“Accept-Ranges: none”对 client 表明心意;server 也可以主动告诉 client “Accept-Ranges: bytes”,但是 client 也可以在没有收到这个指示的前提下向 server 发 Range 请求。
    2) byte-range-set 中的区间可以是“有洞”的,也可以是部分重叠的
    3) 单区间的 byte-range-set 正常回应就可以了,但是多区间 byte-range-set 需要 server 使用 multipart/byterange 来回应

    Range头域  
      Range头域可以请求实体的一个或者多个子范围。例如,  
      表示头500个字节:bytes=0-499  
      表示第二个500字节:bytes=500-999  
      表示最后500个字节:bytes=-500  
      表示500字节以后的范围:bytes=500-  
      第一个和最后一个字节:bytes=0-0,-1  
      同时指定几个范围:bytes=500-600,601-999 

     

    原文链接:https://www.cnblogs.com/jhj117/p/5462794.html

    展开全文
  • range()

    2018-07-31 14:10:00
    range() 函数创建一个包含指定范围的元素的数组,包含从 low 到 high (包含 low 和 high)之间的整数或字符。如果 high 比 low 小,则返回反序的数组。 $arr = range(1,5); print_r($arr) ;//Array ( [0] =&gt;...
  • Range

    2018-08-15 15:42:08
    1、 static Range open(C lower, C upper) 开集合。(a,b) static Range closedOpen(C lower, C upper) 左闭右开集合。[a,b) ex:Range range1 = Range.closed(0, 9); //create a range [a,b] = { x | a &...
  • 关于Range()的用法

    2018-11-10 10:46:04
    range(start,stop,step) start是序列的第一个数字,stop是序列最后一个数字之前的数字,step是序列每一个数字之间的差。 如果未指定的话,start默认是0,step默认是1。 如果调用range( )并传入一个整数,将该整数...
  • python中的range()函数

    2019-07-02 09:34:53
    python range()函数可以创建一个整数列表,一般用在for循环中。 函数语法 range(start, stop[,step]) 参数说明: start:计数从start开始,默认是从0开始 stop:计数到stop结束,但是不包括stop。 step:步长,...
  • python3 range 倒序

    2017-08-06 13:31:42
    话不多说上代码,要求简单,从100到1遍历操作。//第三个参数表示的是100所有进行的操作,每次加上-1,直到0 for i in range(100,0,-1): print(i)
  • HTTP Header里的Range和Content-Range参数 转自:http://hongjiang.info/http-header-range-and-content-range/ 这个话题是从实现一个http资源的静态访问引发的。http协议从1.1开始支持获取文件的部分内容,这为...
  • pandas.date_range命令查看date_range函数帮助文档 语法:pandas.date_range(start=None, end=None, periods=None, freq='D', tz=None, normalize=False, name=None, closed=None, **kwargs) 该函数主要用于生成一...
  • 先列几个range()函数的几个用法:   函数原型:range(start, end, scan): 参数含义:start:计数从start开始。默认是从0开始。例如range(5)等价于range(0, 5);  end:技术到end结束,但不包括...
  • 这是我的第一篇博文,也是我这个小白努力的起点...Range是HTML5中新出现的滑块控件,也是常见的控件的之一,不过这个控件的原始样式略丑,所以想对它进行一些改造。需要注意的是Internet Explorer 9及更早IE版本并不支
  • range()函数
  • 1、range多用作循环,range(0,10)返回一个range对象,如想返回一个list,前面加上list转换; 2、arange是numpy模块中的函数,使用前需要先导入此模块,arange(3):返回array类型对象。 【注:range()中的...
  • 本文先比较range与arange的异同点,再详细介绍各自的用法,然后列举了几个简单的示例,最后对xrange进行了简单的说明。1. range与arange的比较 (1)相同点:A、参数的可选性、默认缺省值是一样的;B、结果均包括...
  • 字符串异常:String index out of range: -2 使用字符subString操作的时候,经常会出现一个String index out of range: -1,这个是典型的下标越界,其实位置小于0,结束位置大于字符长度都会报 -1 这个异常。 -2这...
  • np.arange函数

    2017-08-16 19:22:35
    返回值: np.arange()函数返回一个有终点和起点的固定步长的排列,如[1,2,3,4,5],起点是1,终点是5,步长为1。 参数个数情况: np.arange()函数分为一个参数,两个参数,三个参数三种情况 1)一个参数时,参数值...
  • range函数用于产生一组间隔平均的整数,可以指定起始值,结束值以及步长等信息。不包括末端值。 list(range(0,20,2)) Out[2]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] xrange跟range一样,但它不会预先产生...
1 2 3 4 5 ... 20
收藏数 1,075,875
精华内容 430,350
关键字:

range