相关疑难解决方法(0)

在'for'循环中访问索引?

如何访问索引本身以获取如下列表?

ints = [8, 23, 45, 12, 78]
for i in ints:
    print('item #{} = {}'.format(???, i))
Run Code Online (Sandbox Code Playgroud)

当我使用循环遍历它时for,如何访问循环索引,在这种情况下从1到5?

python loops list

3312
推荐指数
22
解决办法
194万
查看次数

为什么Python 3中的"1000000000000000在范围内(1000000000000001)"如此之快?

据我所知,该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中的优化).pokewim的答案感兴趣的人提供了相关的C源代码和解释.

python performance range python-3.x python-internals

1890
推荐指数
11
解决办法
18万
查看次数

Python的生成器和迭代器之间的区别

迭代器和生成器之间有什么区别?关于何时使用每种情况的一些示例会很有帮助.

python iterator generator

482
推荐指数
13
解决办法
13万
查看次数

455
推荐指数
7
解决办法
21万
查看次数

Python打印状态栏和百分比

要实现如下状态栏:

[==========                ]  45%
[================          ]  60%
[==========================] 100%
Run Code Online (Sandbox Code Playgroud)

我希望将它打印到stdout,并保持刷新,而不是打印到另一行.这该怎么做?

python

140
推荐指数
12
解决办法
15万
查看次数

以大写字母分割字符串

在给定字符集出现之前拆分字符串的pythonic方法是什么?

例如,我希望'TheLongAndWindingRoad' 在任何大写字母的出现时分割 (可能除了第一个),并获得 ['The', 'Long', 'And', 'Winding', 'Road'].

编辑:它也应该拆分单个事件,即从'ABC'我想获得 ['A', 'B', 'C'].

python regex string

81
推荐指数
10
解决办法
5万
查看次数

从列表中获取随机样本,同时保持项目的排序?

我有一个排序列表,让我们说:(它不仅仅是数字,它是一个用复杂的耗时算法排序的对象列表)

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)

等等...

python random list sortedlist

80
推荐指数
3
解决办法
10万
查看次数

Python - 初始化多个列表/行

这非常难看:

psData = []
nsData = []
msData = []
ckData = []
mAData = []
RData = []
pData = []
Run Code Online (Sandbox Code Playgroud)

有没有办法在一行上声明这些变量?

python initialization list

65
推荐指数
3
解决办法
5万
查看次数

range()真的创建列表吗?

我的教授和这个人声称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为列表是不正确的.

python range

46
推荐指数
2
解决办法
1万
查看次数

为什么生成器表达式需要大量内存?

问题

让我们假设我想找到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 generator python-2.7

29
推荐指数
1
解决办法
4061
查看次数