Python如何展开列表指定区间内所有值且不丢失末尾数值
问题描述
给定由两个整数构成的闭区间定义列表,例如 range_arr = [-3, 2],需要生成包含区间内所有整数值的列表,预期输出为 [-3, -2, -1, 0, 1, 2]。
原有实现存在两个问题,会导致输出丢失区间右端点数值,原代码如下:
# 注意:不建议用range作为变量名,会覆盖Python内置的range函数 range = [-3,2] new_range = [] for i in range(*range): new_range.append(_) print(new_range) # 运行结果:[-3, -2, -1, 0, 1],缺失右端点2
问题原因:
- 循环迭代变量为
i,但append时传入的是_,存在变量使用错误;- Python内置
range()生成的是左闭右开序列,即包含起始值、不包含传入的终止值,直接传入原区间的右端点自然不会把该值纳入序列。
简洁实现方案
不需要在循环结束后手动追加末尾值,利用range本身的特性就可以写出紧凑、可读性强的实现:
- 一行实现版本:直接将区间右端点+1作为range的终止参数,自动覆盖闭区间所有整数
range_arr = [-3, 2] new_range = list(range(range_arr[0], range_arr[1] + 1)) print(new_range) # 输出:[-3, -2, -1, 0, 1, 2]
- 可读性更好的解包版本:适合区间参数后续可能扩展(比如加步长)的场景
range_arr = [-3, 2] start, end = range_arr new_range = list(range(start, end + 1))
补充说明:如果区间还定义了步长,只需要在解包时把步长也取出来,终止值保持+1的逻辑即可,不需要额外调整循环逻辑,比手动追加元素的写法鲁棒性更强。
内容的提问来源于stack exchange,提问作者Serhei
相关产品推荐
相关产品推荐

