我正在尝试学习列表理解,给出两个数字作为输入,我想生成一系列连续数字。
例如:
Input: 11,16
Output: [(11,12),(11,12,13),(11,12,13,14),(11,12,13,14,15),(11,12,13,14,15,16)]
所以我正在尝试以下内容:
def genSeries(start,stop):
return [(start, x) for y in range(start,stop) for x in ?]
答案 0 :(得分:5)
[tuple(range(start, i+1)) for i in range(start+1, stop+1)]
答案 1 :(得分:2)
您需要一个超过stop
值的循环;通过这种方式,您可以生成系列范围,从range(11, 13)
到range(11, 17)
:
def genSeries(start, stop):
return [tuple(range(start, endvalue)) for endvalue in range(start + 2, stop + 2)]
请注意,结束值未包含在range()
中,因此要生成从11
到16
的值,您需要告诉range()
使用17
作为结束值。这也是endvalue
范围从start + 2
到stop + 2
的原因。第一个范围从11
到12
包含,因此您需要从start + 2
开始获取独占止损值,最后一个范围从start
到{ {1}}包含在内,因此您需要使用stop
来生成该内容,这反过来意味着range(start, stop + 1)
范围必须转到endvalue
。
只需将每个单独stop + 2
的{{1}}对象直接转换为元组。
演示:
range()
答案 2 :(得分:1)
尝试这个(哇很多人同时打字:-)我建议只添加2次......:
#! /usr/bin/env python
from __future__ import print_function
def gen_series(start, stop):
return [tuple(range(start, x + 2)) for x in range(start, stop)]
print(gen_series(11, 16))
的产率:
[(11, 12), (11, 12, 13), (11, 12, 13, 14), (11, 12, 13, 14, 15), (11, 12, 13, 14, 15, 16)]
更新:这是一个生成器函数,所以在python v3中有一个懒惰的评估...在python v2中,范围可能需要由xrange替换以实现完全休闲; - )
#! /usr/bin/env python
from __future__ import print_function
def series_gen(start, stop):
"""Generator function solution, where the caller can call list on."""
for x in range(start, stop):
yield tuple(range(start, x + 2))
print(list(series_gen(11, 16)))
收益率(惊喜,惊喜):
[(11, 12), (11, 12, 13), (11, 12, 13, 14), (11, 12, 13, 14, 15), (11, 12, 13, 14, 15, 16)]
同样@MartijnPieters请注意:也可以写一下这个功能:
def gen_series(start, stop):
return ((range(start, x + 2)) for x in range(start, stop))
但要注意外括号"是"一个生成器表达式,"内部"是元组的缩写(相信它会收到多个条目。