从一个范围获取两个值

时间:2015-07-02 09:39:04

标签: python lambda iterator

我有:

>>> se = iter(map(lambda x: (x, x + 1), range(5)))
>>> print("{:d} {:d}".format(*(next(se))))
0 1

输出是预期的输出,但有更好的方法吗?对于例如以我得到的方式:

>>> print("{:d} {:d}".format(se))
    0 1

1 个答案:

答案 0 :(得分:1)

您可以使用generator expression代替map + lambda

>>> se = ((x, x+1) for x in range(5))
>>> next(se)
(0, 1)
>>> next(se)
(1, 2)

并且,您可以在格式字符串中使用索引:

>>> '{0[0]} {0[1]}'.format(next(se))
'0 1'

请参阅Format String syntax

如果要迭代迭代器,可以使用for语句和迭代器解压缩:

>>> se = ((x, x+1) for x in range(5))
>>> for a, b in se:
...     print('{} {}'.format(a, b))
... 
0 1
1 2
2 3
3 4
4 5
相关问题