在Python中有没有设置整数范围内列表值的方法?

4
我希望能执行以下操作:
>>> [0-2, 4]  #case 1
[-2, 4]     #I want the output to be [0, 1, 2, 4]

我知道我可以这样实现相同的功能:

>>> list(range(3)) + [4]   #case 2
[0, 1, 2, 4]

但我很好奇,是否有办法使用案例1的方法(或类似的方法)实现相同的结果?我需要重写整数“-”运算符还是需要对列表执行任何操作?
2个回答

8
>>> [*range(0,3), 4]
[0, 1, 2, 4]

应该尽可能接近。仅适用于Python 3。

现在你有一组范围和静态值的列表。开始吧! - user1767754
@user1767754 我拒绝。我们不能在列表推导式中使用星号表达式,这让这个案例变得无聊。 - timgeb
1
这正是我需要的,因为我尝试了 [range(0,3), 4],它返回函数作为索引0。谢谢! - Allen W

1
@timgeb的答案很好,但它返回一个list,而默认情况下range返回一个"an immutable sequence type",因此使用itertools.chain将给出一个更接近于range()iterable
import itertools
itertools.chain(range(3), range(4,5))

使用list()将其转换为列表后,它将会显示:

[0, 1, 2, 4]

或者你可以制作自己的 生成器:
def joinRanges(r1, r2):
    for i in r1:
        yield i
    for i in r2:
        yield i

当使用以下方式调用时,它能够达到与以前相同的效果:

joinRanges(range(3), range(4,5))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接