如何使用List Comprehension在Python中生成以下一系列数字?

时间:2016-06-27 17:06:42

标签: python list-comprehension

我正在尝试学习列表理解,给出两个数字作为输入,我想生成一系列连续数字。

例如:

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 ?]

3 个答案:

答案 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()中,因此要生成从1116的值,您需要告诉range()使用17作为结束值。这也是endvalue范围从start + 2stop + 2的原因。第一个范围从1112包含,因此您需要从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))

但要注意外括号"是"一个生成器表达式,"内部"是元组的缩写(相信它会收到多个条目。