我对以下代码感到有点困惑:
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
print key, 'corresponds to', d[key]
Run Code Online (Sandbox Code Playgroud)
我不明白的是这个key
部分.Python如何识别它只需要从字典中读取密钥?key
Python中是一个特殊的词吗?或者它只是一个变量?
Python中"iterable","iterator"和"iteration"的最基本定义是什么?
我已阅读多个定义,但我无法确定其确切含义,因为它仍然不会沉入其中.
有人可以帮助我解释外行人的3个定义吗?
我有时需要在Python中迭代一个列表,查看"current"元素和"next"元素.到目前为止,我已经完成了以下代码:
for current, next in zip(the_list, the_list[1:]):
# Do something
Run Code Online (Sandbox Code Playgroud)
这有效并且符合我的预期,但是有更多惯用或有效的方法来做同样的事情吗?
任何人都可以修改namedtuple或提供替代类,以便它适用于可变对象吗?
主要是为了可读性,我想要类似于namedtuple这样做:
from Camelot import namedgroup
Point = namedgroup('Point', ['x', 'y'])
p = Point(0, 0)
p.x = 10
>>> p
Point(x=10, y=0)
>>> p.x *= 10
Point(x=100, y=0)
Run Code Online (Sandbox Code Playgroud)
必须可以腌制生成的对象.并且根据命名元组的特征,当表示时,输出的排序必须与构造对象时参数列表的顺序相匹配.
我需要迭代一个循环列表,可能多次,每次从最后访问的项目开始.
用例是连接池.客户端请求连接,迭代器检查指向的连接是否可用并返回它,否则循环直到找到可用的连接.
有没有一种巧妙的方法在Python中做到这一点?
为什么在类上定义__getitem__使其可迭代?
例如,如果我写:
class b:
def __getitem__(self, k):
return k
cb = b()
for k in cb:
print k
Run Code Online (Sandbox Code Playgroud)
我得到输出:
0
1
2
3
4
5
6
7
8
...
Run Code Online (Sandbox Code Playgroud)
我真的希望看到"for c in cb:"中返回的错误
是什么让Python中的东西可迭代?即.可以用它循环for
我可以在Python中创建一个可迭代的类吗?如果是这样,怎么样?
我想了解更多iterators
,所以如果我错了请纠正我.
迭代器是一个对象,它具有指向下一个对象的指针,并被读取为缓冲区或流(即链接列表).它们特别有效,因为它们只是通过引用而不是使用索引来告诉您接下来的内容.
但是我仍然不明白为什么会发生以下行为:
In [1]: iter = (i for i in range(5))
In [2]: for _ in iter:
....: print _
....:
0
1
2
3
4
In [3]: for _ in iter:
....: print _
....:
In [4]:
Run Code Online (Sandbox Code Playgroud)
在通过迭代器(In [2]
)的第一个循环后,它就好像被消耗并留空,所以第二个循环(In [3]
)不打印任何内容.
但是我从未为iter
变量赋予新值.
在for
循环的引擎下真正发生了什么?
在许多语言中,我们可以做类似的事情:
for (int i = 0; i < value; i++)
{
if (condition)
{
i += 10;
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Python中做同样的事情?以下(当然)不起作用:
for i in xrange(value):
if condition:
i += 10
Run Code Online (Sandbox Code Playgroud)
我可以这样做:
i = 0
while i < value:
if condition:
i += 10
i += 1
Run Code Online (Sandbox Code Playgroud)
但我想知道在Python中是否有更优雅(pythonic?)的方式.
我有一个生成器(一个产生东西的函数),但是当试图将它传递给gensim.Word2Vec
我时,我得到以下错误:
TypeError:您不能将生成器作为句子参数传递.尝试一个迭代器.
发生器不是一种迭代器吗?如果没有,我如何从中制作迭代器?
看一下库代码,它似乎只是简单地迭代句子for x in enumerate(sentences)
,这对我的生成器来说效果很好.那么是什么导致错误?
python ×10
iterator ×5
dictionary ×1
gensim ×1
iterable ×1
iteration ×1
list ×1
mutable ×1
namedtuple ×1
overloading ×1
python-2.7 ×1
terminology ×1
word2vec ×1