据我所知,该range()函数实际上是Python 3中的一个对象类型,它可以动态生成其内容,类似于生成器.
在这种情况下,我预计下面的行会花费大量的时间,因为为了确定1千万亿是否在该范围内,必须生成一个千万亿的值:
1000000000000000 in range(1000000000000001)
Run Code Online (Sandbox Code Playgroud)
此外:似乎无论我添加多少个零,计算或多或少都需要相同的时间(基本上是瞬时的).
我也试过这样的事情,但计算仍然几乎是即时的:
1000000000000000000000 in range(0,1000000000000000000001,10) # count by tens
Run Code Online (Sandbox Code Playgroud)
如果我尝试实现自己的范围功能,结果就不那么好了!!
def my_crappy_range(N):
i = 0
while i < N:
yield i
i += 1
return
Run Code Online (Sandbox Code Playgroud)
range()在引擎盖下做的对象是什么让它如此之快?
选择Martijn Pieters的答案是因为它的完整性,但也看到了abarnert的第一个答案,可以很好地讨论在Python 3中range成为一个完整的序列意味着什么,以及关于__contains__Python实现中函数优化的潜在不一致的一些信息/警告.abarnert的另一个答案更详细,并为那些对Python 3中的优化背后的历史感兴趣的人提供了链接(并且缺乏xrangePython 2中的优化).poke和wim的答案为感兴趣的人提供了相关的C源代码和解释.
如何创建list仅包含零的零件?我希望能够创造一个零list为每个int在range(10)
例如,如果int在范围内4我会得到:
[0,0,0,0]
Run Code Online (Sandbox Code Playgroud)
并为7:
[0,0,0,0,0,0,0]
Run Code Online (Sandbox Code Playgroud) 如何在Python中使用默认值的10倍初始化列表?
我正在寻找一种好看的方法来初始化具有特定范围的空列表.因此,请创建一个包含10个零或其他内容的列表,以确保我的列表具有特定长度.
请考虑以下代码:
i = [1, 2, 3, 5, 8, 13]
j = []
k = 0
for l in i:
j[k] = l
k += 1
print j
Run Code Online (Sandbox Code Playgroud)
输出(Win 7 32位上的Python 2.6.6)是:
> Traceback (most recent call last):
> j[k] = l IndexError: list assignment index out of range
Run Code Online (Sandbox Code Playgroud)
我想这很简单,我不明白.有人可以清理它吗?
我正在尝试建立一个计数直方图...所以我创建了桶.我知道我可以通过并附加一堆零,即沿着这些方向的东西:
buckets = []
for i in xrange(0,100):
buckets.append(0)
Run Code Online (Sandbox Code Playgroud)
有更优雅的方式吗?我觉得应该有一种方法来声明一个特定大小的数组.
我知道numpy有,numpy.zeros但我想要更通用的解决方案
我想知道如何初始化一个数组(或列表),但要用值填充,以具有定义的大小.
例如在C中:
int x[5]; /* declared without adding elements*/
Run Code Online (Sandbox Code Playgroud)
我如何在python中做到这一点?
谢谢.
我知道你可以在python中创建容易嵌套的列表,如下所示:
[[1,2],[3,4]]
Run Code Online (Sandbox Code Playgroud)
但是如何创建一个3x3x3的零矩阵?
[[[0] * 3 for i in range(0, 3)] for j in range (0,3)]
Run Code Online (Sandbox Code Playgroud)
要么
[[[0]*3]*3]*3
Run Code Online (Sandbox Code Playgroud)
似乎不对.没有办法创建它只是将维度列表传递给方法?例如:
CreateArray([3,3,3])
Run Code Online (Sandbox Code Playgroud) 每当我尝试在 python 中创建一个空列表时,我意识到如果我不知道并定义它的范围,我无法像在 R 中那样将值设置为我想要的任何索引。
q = list()
q[ 2 ] = 9
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
Run Code Online (Sandbox Code Playgroud)
但在 R 中,它不会发生。
Q = c( )
Q[ 4 ] = 3
>>> [1] NA NA 4
Run Code Online (Sandbox Code Playgroud)
我可以在 python 中做任何等效的操作吗?
是否有可能创建尚未定义的变量/名称* 列表,然后在稍后阶段遍历列表以定义它们?
像这样:
varList = [varA, varB, varC]
for var in varList:
var = 0
print(varList)
>>>[0, 0, 0]
Run Code Online (Sandbox Code Playgroud)
我问的原因是因为我有一个项目,假设我可以通过循环遍历 Pandas 系列 * 以这种方式批量填充 40 多个变量/名称*。不幸的是,Python 似乎不允许在列表中使用未定义的变量。有没有人有创造性的解决方法?
编辑:既然你问了具体的问题,这里是:
我有一个看起来像这样的 Pandas 系列(请原谅瑞典人):
print(Elanv)
>>>
Förb. KVV PTP 5653,021978
Förb. KVV Skogsflis 0
Förb. KVV Återvinningsflis 337,1416119
Förb. KVV Eo1 6,1
Förb. HVC Återvinningsflis 1848
Name: Elanv, dtype: object
Run Code Online (Sandbox Code Playgroud)
我想将这个数组中的每个值存储到一组新的变量/名称*,我想要控制的名称。例如,我希望包含第一个值的新变量/名称* 被称为“förbKVVptp”,第二个被称为“förbKVVsflis”,依此类推。
“正常”选项是手动分配每个变量,如下所示:
förbKVVptp, förbKVVsflis, förbKVVåflis = Elanv.iloc[0], Elanv.iloc[1], Elanv.iloc[2] ....
Run Code Online (Sandbox Code Playgroud)
但这会创建一个看起来不太好看的长串代码,只是为了命名变量/名称*。相反,我认为我可以做这样的事情(显然使用所有变量/名称*,而不仅仅是前三个),看起来和感觉更干净:
varList = [förbKVVptp, förbKVVsflis, förbKVVåflis]
for i, var in enumerate(varList): var …Run Code Online (Sandbox Code Playgroud) test = [[None for e in range(1)] for e in range(len(foobar)/2)]
for delete in range(0,len(test)):
del test[delete][0]
Run Code Online (Sandbox Code Playgroud)
这不是创建一个最pythonic的方式 empty list
你会推荐别的吗?
我知道这个问题解释了它.但是你可以看到,这不是前一个的重复.
我需要在空列表中添加空格,因为从另一个列表中选择的随机字中有字符.如何将空白添加到空列表中,以便稍后我可以为这些空白添加字母?作业需要1.制作一个列表并选择一个随机单词2.将单词转换为单词列表3.打印一个空列表并添加尽可能多的空白作为单词中的字母4.在循环中要求用户输入一个字母直到他们正确猜出这个词或没有机会5.如果字母正确,请将字母添加到正确的索引但在空白列表中
python ×12
list ×5
arrays ×3
exception ×1
matrix ×1
nested-lists ×1
performance ×1
python-3.x ×1
r ×1
range ×1