更优雅地修改数组的数组



这个可以工作,但是看起来很丑。

    # convert timestamps to psql timestamp format
    for block in ts_wrap_array:
        for date in block:
            ts_wrap_array[ts_wrap_array.index(block)][block.index(date)] = str(date).replace('.0', '000')

有什么我可以做得更好的吗?

您可以使用enumerate()来获取索引,而不是使用.index() -

for block in ts_wrap_array:
    for j, date in enumerate(block):
       block[j] = str(date).replace('.0', '000')

一个列表推导的替代-

ts_wrap_array[:] = [[str(date).replace('.0', '000') for date in block] for block in ts_wrap_array]

请注意,这不会影响直接指向内部列表的任何其他变量(使用for循环方法时将受到影响),示例-

>>> l = [[1,2,3,4],[3,4,5,6]]
>>> k = l[0]
>>> l[:] = [[x + 1 for x in y] for y in l]
>>> l
[[2, 3, 4, 5], [4, 5, 6, 7]]
>>> k
[1, 2, 3, 4]

因此,如果上述情况对于您的情况是真实的,您应该使用答案顶部给出的for循环方法。

你可以 enumerate 块:

for block in ts_wrap_array:
    for i, date in enumerate(block):
        block[i] = str(date).replace('.0', '000')

使用enumerate

for i, block in enumerate(ts_wrap_array):
        for j, date in enumerate(block):
            ts_wrap_array[i][j] = str(date).replace('.0', '000')

相关内容

  • 没有找到相关文章

最新更新