Python附加到列表或忽略

时间:2018-01-01 23:00:05

标签: python list

我想按照以下方式制作一个数组:

for i in range(0, len(final), 3):
    ar.append(
        (
            final[i] + 100,
            final[i+1] + 100,
            final[i+2] + 100
        )
    )

但有一个简单的问题。 最终的长度约为2682715,当2682714step=3

达到final[2682714] = OK final[2682715] = OK final[2682716] = ERROR 时,我对列表索引有例外
try/except IndexError

我该如何处理?我们可以使用{{1}},但整个项目将被忽略

3 个答案:

答案 0 :(得分:4)

final = range(31)
ar = []
for i in range(0, len(final), 3):
    ar.append(tuple(final[i:i+3]))

print(ar)

输出:

[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11), (12, 13, 14), (15, 16, 17), (18,
19, 20), (21, 22, 23), (24, 25, 26), (27, 28, 29),(30,)]

你的列表长度可以被3整除 - 你的最后一个元素将是最后一个三元组,而不是只有一个元素的元组...

我没有休息可以被3整除,所以最后我有一个不完整的tuple

使用列表推导tuple(final[i:i+3])将确保您不会超越final的边界,其余的12号码位于上一个tuple

答案 1 :(得分:2)

你可以使用列表理解:

final = (1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15)
ar = []
ar = [final[i:i + 3] for i in range(0, len(final), 3)]
print(ar)

输出:

[(1, 2, 3), (4, 5, 7), (8, 9, 10), (11, 12, 13), (14, 15)]

答案 2 :(得分:2)

切片很好,一行添加zip

a = [*range(9)]

[*zip(a[::3], a[1::3], a[2::3])]

Out[321]: [(0, 1, 2), (3, 4, 5), (6, 7, 8)]  

zip会自动删除不构成三重奏的额外元素