如何使用范围制作包含其他值的列表?

时间:2017-01-01 22:39:37

标签: python python-2.7 list loops append

我目前想要以下输出:

[161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 13362, 13363, 13364, 13365, 13366, 13367, 13368, 13369, 13370, 13383, 13384, 11100, 667, 6503, 6506, 666]

(更精简版:):

[161...172, 13362...13370, 13383, 13384, 11100, 667, 6503, 6506, 666]

所以我想这样做:

emoteIds = range(161, 173)
for i in range(13362, 13371):
    emoteIds.append(i)
for i in [13383, 13384, 11100, 667, 6503, 6506, 666]:
    emoteIds.append(i)

然而,我觉得这可以浓缩。有没有办法让我在列表中加入range()而不在列表中创建另一个列表?我尝试使用list()功能,但无济于事。

2 个答案:

答案 0 :(得分:2)

你不需要使用循环;只是连接列表对象:

guard

(在Python 3中,您必须使用emoteIds = range(161, 173) + range(13362, 13371) + [ 13383, 13384, 11100, 667, 6503, 6506, 666] 调用将list()对象转换为实际列表。

您也可以查看list.extend();你可以使用:

range()

emoteIds = range(161, 173) emoteIds.extend(range(13362, 13371)) emoteIds.extend([13383, 13384, 11100, 667, 6503, 6506, 666]) 扩充作业,与此处的+=相同:

list.extend()

答案 1 :(得分:0)

使用numpy.r_为你创造范围 -

 np.r_[161:173, 13362:13371, 13383, 13384, 11100, 667, 6503, 6506, 666]

示例运行 -

In [461]: np.r_[161:173, 13362:13371, 13383, 13384, 11100, 667, 6503, 6506, 666]
Out[461]: 
array([  161,   162,   163,   164,   165,   166,   167,   168,   169,
         170,   171,   172, 13362, 13363, 13364, 13365, 13366, 13367,
       13368, 13369, 13370, 13383, 13384, 11100,   667,  6503,  6506,   666])

如果您需要列表作为输出,请在最后使用.tolist()方法 -

np.r_[161:173, 13362:13371, 13383, 13384, 11100, 667, 6503, 6506, 666].tolist()