如何用Python列表推导式生成从p开始的b个元素序列?
问题分析与解决思路
首先,你的代码出现重复结果的原因很明确:在列表推导式[p+1 for i in range(b)]里,你没有用到循环变量i——不管循环执行多少次,每个元素都是固定的p+1,所以调用raw(10,4)自然会得到四个11。
接下来分两种情况解决:
情况1:需求是生成从p开始的连续b个整数
如果你的示例是笔误(比如原本想返回[10,11,12,13]),那只需要在推导式里把p+1改成p + i,利用循环变量i来实现递增:
def raw(p, b): return [p + i for i in range(b)]
调用raw(10,4)就会返回[10,11,12,13],完全符合“以p为起始、包含b个元素的数值列表”的描述。
另外还有个更简洁的写法,直接用Python内置的range函数转换为列表:
def raw(p, b): return list(range(p, p + b))
效果和上面的列表推导式完全一致。
情况2:示例是正确的(需要跳过p+2这个数)
如果你的示例确实是要返回[10,11,13,14],那说明需求是从p开始生成b个元素,但要跳过p+2。这时候可以用循环来手动控制递增逻辑,遇到需要跳过的数时额外加1:
def raw(p, b): result = [] current = p for _ in range(b): result.append(current) current += 1 # 当current刚好是p+2时,跳过这个数 if current == p + 2: current += 1 return result
这样调用raw(10,4)就会得到[10,11,13,14]。如果后续有更通用的跳数规则,还可以根据规则调整判断条件。
内容的提问来源于stack exchange,提问作者Christopher Martínez Bernal
相关产品推荐
相关产品推荐

