我有一个由行列表表示的数据网格:
tableData = [
[-27.37, 36.61 , 8.90 , -11.20, -36.03, -42.34],
[16.83 , -33.45, -5.15 , 12.90 , -48.60, -8.70],
[-19.73, 2.64 , 7.21 , 24.16 , 18.38 , 20.47],
[-31.05, 15.07 , 42.69 , -32.13, -36.02, 42.31],
[15.18 , 30.54 , -47.31, 48.38 , 31.60 , -1.98]
]
现在,我想插入两个包含None
值的列,例如在列2&3和列4&5之间,这样我就有了以下内容:
tableDataWithNones = [
[-27.37, 36.61 , None, 8.90 , -11.20, None, -36.03, -42.34],
[16.83 , -33.45, None, -5.15 , 12.90 , None, -48.60, -8.70],
[-19.73, 2.64 , None, 7.21 , 24.16 , None, 18.38 , 20.47],
[-31.05, 15.07 , None, 42.69 , -32.13, None, -36.02, 42.31],
[15.18 , 30.54 , None, -47.31, 48.38 , None, 31.60 , -1.98]
]
我可以用双for循环这样做:
spacerPositions = [2, 4]
for i in tableData:
for j in reversed(spacerPositions):
i.insert(j, None)
但这并不像是一种Python式的方式。你知道吗
我在想我可以使用numpy来转换数据,这样列就可以变成行,然后我可以使用insert
来放入None
的行,然后再转换回数据。但是insert不能为索引取多个值,所以我仍然必须使用for循环。你知道吗
有什么办法能让我做得更好吗?你知道吗
使用^{} :
一种非传统的、实用的方法:
将此与
通过
timeit(...,number=10000)
,我得到:第一种算法为0.144109010696 第二种算法为0.606826066971
这是有意义的,因为insert是O(n),而append是O(1)。你知道吗
令人惊讶的是,使用numpy为已接受的解决方案计时时:
给出0.44481992721557617
相关问题 更多 >
编程相关推荐