如何用Pythonic方式实现可定制的交替整数序列生成函数?
实现交替整数列表的Pythonic方式
这里有几种简洁的Pythonic实现,满足你创建形如[-1, 1, -2, 2, ..., -n, n]列表的需求:
方法1:嵌套列表推导式
这是最直观的简洁写法,通过双层循环展开每个整数对应的正负对:
def alternating_range(n): return [num for i in range(1, n + 1) for num in (-i, i)]
测试示例:
print(alternating_range(2)) # 输出 [-1, 1, -2, 2] print(alternating_range(10)) # 输出 [-1, 1, -2, 2, ..., -10, 10]
方法2:利用itertools.chain展开序列
如果需要处理较大的n,用itertools可以避免创建中间元组列表,更节省内存:
from itertools import chain def alternating_range(n): return list(chain.from_iterable((-i, i) for i in range(1, n + 1)))
chain.from_iterable会直接迭代每个(-i,i)元组里的元素,无需先构建完整的元组列表。
方法3:生成器函数(内存友好型)
如果不需要一次性生成完整列表,生成器函数可以按需产出元素,尤其适合超大n的场景:
def alternating_range(n): for i in range(1, n + 1): yield -i yield i # 调用时转成列表 print(list(alternating_range(3))) # 输出 [-1, 1, -2, 2, -3, 3]
这些写法都比普通for循环更符合Python的简洁风格,你可以根据实际场景选择最适合的方式。
内容的提问来源于stack exchange,提问作者DaHoC
相关产品推荐
相关产品推荐

