我的教授和这个家伙都声称range
创造了价值清单。
“注意:范围函数仅返回包含从x到y-1的数字的列表。例如,range(5,10)返回列表[5、6、7、8、9]。”
我认为这是不准确的,因为:
type(range(5, 10))
<class 'range'>
此外,访问由创建的整数的唯一显而易见的方法range
是遍历它们,这使我认为标记range
为列表是不正确的。
在Python
2.x中,range
返回一个列表,但在Python
3.x中,range
返回一个不可变序列,类型为range
。
Python 2.x:
>>> type(range(10))
<type 'list'>
>>> type(xrange(10))
<type 'xrange'>
Python 3.x:
>>> type(range(10))
<class 'range'>
在Python 2.x中,如果要获得可迭代对象(如在Python
3.x中),则可以使用xrange
function,该函数返回type的不可变序列xrange
。
优势xrange
超过range
在Python 2.x的:
xrange()
over的优点range()
是最小的(因为xrange()
在要求输入值时仍必须创建值),除非在内存不足的机器上使用了很大的范围或从未使用过所有范围的元素(例如当循环被使用时)。通常以中断终止)。
注意:
此外,访问由创建的整数的唯一明显方法
range()
是遍历它们,
不。由于range
Python 3中的对象是不可变的序列,因此它们也支持索引。引用range
功能文档,
范围实现除连接和重复之外的所有通用序列操作
…
范围对象实现
collections.abc.Sequence
ABC,并提供诸如包含测试,
元素索引查找 ,切片和对负索引的支持等功能。
例如,
>>> range(10, 20)[5]
15
>>> range(10, 20)[2:5]
range(12, 15)
>>> list(range(10, 20)[2:5])
[12, 13, 14]
>>> list(range(10, 20, 2))
[10, 12, 14, 16, 18]
>>> 18 in range(10, 20)
True
>>> 100 in range(10, 20)
False
通过不变的range
序列,所有这些都是可能的。
最近,我遇到了一个问题,我认为将其包含在此处是适当的。考虑此Python 3.x代码
from itertools import islice
numbers = range(100)
items = list(islice(numbers, 10))
while items:
items = list(islice(numbers, 10))
print(items)
人们会希望此代码将每十个数字作为列表打印,直到99。但是,它将无限运行。你能解释为什么吗?
解
Because the
range
returns an immutable sequence , not an iterator
object. So, wheneverislice
is done on arange
object, it always starts
from the beginning. Think of it as a drop-in replacement for an immutable
list. Now the question comes, how will you fix it? Its simple, you just have
to get an iterator out of it. Simply change
numbers = range(100)
to
numbers = iter(range(100))
Now,
numbers
is an iterator object and it remembers how long it has been
iterated before. So, when theislice
iterates it, it just starts from the
place where it previously ended.
我的教授和这个家伙都声称范围创建了一个值列表。 注意:range函数只返回一个包含从x到y-1的数字的列表。例如,range(5,10)返回列表[5,6,7,8,9] 我认为这是不准确的,因为: 此外,访问由范围创建的整数的唯一明显方法是遍历它们,这使我相信将范围标记为列表是不正确的。
Range 创建一个发射特定整数序列的Observable Range操作符发射一个范围内的有序整数序列,你可以指定范围的起始和长度。 RxJava将这个操作符实现为range函数,它接受两个参数,一个是范围的起始值,一个是范围的数据的数目。如果你将第二个参数设为0,将导致Observable不发射任何数据(如果设置为负数,会抛异常)。 range默认不在任何特定的调度器上执行。有一个变体可以通过
我试图从一个范围创建一个列表,但当我将它粘贴到另一个列表中时,我得到的是一个类,而不是我期望的列表- 代码: 这输出<代码>范围(0,3),
上述代码的输出是: 但是我很困惑为什么list1没有被修改,因为list1和list2都首先引用同一个列表对象。有人能帮我理解这里到底发生了什么吗?
问题内容: 例如,可以将其用于生成一次性填充密钥吗? 另外,它的来源是什么,如何将其用于生成 x 和 y 之间的随机数? 问题答案: 在这个宇宙中,唯一可以真正考虑的是基于量子效应的宇宙。常见的例子是放射性衰变。对于某些原子,您只能确定其半衰期,但不能确定下一个原子核会破裂。 关于-取决于实现。在Linux中,它用作熵源: Linux内核根据键盘时序,鼠标移动和IDE时序生成熵,并通过特殊文件/
问题内容: 据我所知,使用Java 8流求和的方法是: 在我看来,这似乎有些cru琐-只是应该放弃lambda和数据流的样板“仪式”。 最佳实践告诉我们,实例比数组更可取,但是对于这种求和,数组看起来更干净: 当然,可以做到这一点: 但这比更长。 我知道这与需要围绕Java的非对象原语对流进行改造的方式有关,但是,我在这里还缺少什么吗?有什么方法可以压缩自动装箱以使其更短吗?还是这只是当前的最新状