更优雅地改变阵列阵列

时间:2015-09-02 05:21:24

标签: python loops multidimensional-array

这很有效,但看起来很难看。

    # 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')

我能申请什么才能让这更好?

3 个答案:

答案 0 :(得分:3)

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

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

列表comphrension替代 -

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循环方法。

答案 1 :(得分:1)

你可以enumerate阻止:

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

答案 2 :(得分:0)

使用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')