用生成器表达式改进代码

时间:2013-07-15 05:09:41

标签: python python-2.7

我想在 d 中搜索 a ,下面的代码块会返回正确的结果,即3。 但是,如何将下面的代码写入生成器表达式?

a = [4, 6]
d= {0: [0, 4], 1: [3, 6], 2: [4, 0], 3: [4, 6], 4: [6, 3], 5: [6, 4]}

for i in range(0, len(d)):
    if d.get(i) == a:
        print i

3 个答案:

答案 0 :(得分:2)

您不需要范围。

>>> a = [4, 6]
>>> d = {0: [0, 4], 1: [3, 6], 2: [4, 0], 3: [4, 6], 4: [6, 3], 5: [6, 4]}
>>> [i for i in d if d[i] == a]
[3]
>>> (i for i in d if d[i] == a)
<generator object <genexpr> at 0x7f14d9629690>
>>> next(_)
3

答案 1 :(得分:1)

使用next()

next(k for k, v in d.iteritems() if v == a)

next()将返回第一个结果。

答案 2 :(得分:1)

遍历这些项目:

>>> a = [4, 6]
>>> for k, v in d.iteritems():
...     if v == a:
...             print k
... 
3

d.iteritems()返回字典中每个项目的生成器及其键和值:

>>> list(d.iteritems())
[(0, [0, 4]), (1, [3, 6]), (2, [4, 0]), (3, [4, 6]), (4, [6, 3]), (5, [6, 4])]

如果您正在使用python 3,items()与iteritems相同。