我想按照以下方式制作一个数组:
for i in range(0, len(final), 3):
ar.append(
(
final[i] + 100,
final[i+1] + 100,
final[i+2] + 100
)
)
但有一个简单的问题。 最终的长度约为2682715,当2682714
与step=3
final[2682714] = OK
final[2682715] = OK
final[2682716] = ERROR
时,我对列表索引有例外
try/except IndexError
我该如何处理?我们可以使用{{1}},但整个项目将被忽略
答案 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
的边界,其余的1
或2
号码位于上一个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
会自动删除不构成三重奏的额外元素