如何访问索引本身以获取如下列表?
ints = [8, 23, 45, 12, 78]
for i in ints:
print('item #{} = {}'.format(???, i))
Run Code Online (Sandbox Code Playgroud)
当我使用循环遍历它时for,如何访问循环索引,在这种情况下从1到5?
据我所知,该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源代码和解释.
迭代器和生成器之间有什么区别?关于何时使用每种情况的一些示例会很有帮助.
要实现如下状态栏:
[========== ] 45%
[================ ] 60%
[==========================] 100%
Run Code Online (Sandbox Code Playgroud)
我希望将它打印到stdout,并保持刷新,而不是打印到另一行.这该怎么做?
在给定字符集出现之前拆分字符串的pythonic方法是什么?
例如,我希望'TheLongAndWindingRoad'
在任何大写字母的出现时分割
(可能除了第一个),并获得
['The', 'Long', 'And', 'Winding', 'Road'].
编辑:它也应该拆分单个事件,即从'ABC'我想获得
['A', 'B', 'C'].
我有一个排序列表,让我们说:(它不仅仅是数字,它是一个用复杂的耗时算法排序的对象列表)
mylist = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,9 , 10 ]
Run Code Online (Sandbox Code Playgroud)
是否有一些python函数会给我N个项目,但会保留订单吗?
例:
randomList = getRandom(mylist,4)
# randomList = [ 3 , 6 ,7 , 9 ]
randomList = getRandom(mylist,4)
# randomList = [ 1 , 2 , 4 , 8 ]
Run Code Online (Sandbox Code Playgroud)
等等...
这非常难看:
psData = []
nsData = []
msData = []
ckData = []
mAData = []
RData = []
pData = []
Run Code Online (Sandbox Code Playgroud)
有没有办法在一行上声明这些变量?
我的教授和这个人声称range创建了一系列价值观.
"注意:范围函数只返回一个包含从x到y-1的数字的列表.例如,范围(5,10)返回列表[5,6,7,8,9]."
我认为这是不准确的,因为:
type(range(5, 10))
<class 'range'>
Run Code Online (Sandbox Code Playgroud)
此外,访问创建的整数的唯一明显方法range是迭代它们,这使我相信标记range为列表是不正确的.
让我们假设我想找到n**2所有小于的数字20000000.
import time, psutil, gc
gc.collect()
mem_before = psutil.virtual_memory()[3]
time1 = time.time()
# (comprehension, generator, function)-code comes here
time2 = time.time()
mem_after = psutil.virtual_memory()[3]
print "Used Mem = ", (mem_after - mem_before)/(1024**2) # convert Byte to Megabyte
print "Calculation time = ", time2 - time1
Run Code Online (Sandbox Code Playgroud)
1.创建通过理解列表:
x = [i**2 for i in range(20000000)]
Run Code Online (Sandbox Code Playgroud)
这真的很慢而且耗时:
Used Mem = 1270 # Megabytes
Calculation time = 33.9309999943 # Seconds
Run Code Online (Sandbox Code Playgroud)
2.使用'()'以下方法创建生成器
x = (i**2 for …Run Code Online (Sandbox Code Playgroud) python ×10
list ×3
range ×3
generator ×2
iterator ×1
loops ×1
performance ×1
python-2.7 ×1
python-3.x ×1
random ×1
regex ×1
sortedlist ×1
string ×1
xrange ×1