如何更有效地编写此代码?

时间:2017-03-02 06:46:26

标签: python coding-efficiency

我觉得这段代码过多了 - 怎么可能更短?我是初学者所以请耐心等待。

The problem statement is this (from Automate the Boring stuff)

我的代码:

row_number() over (partition by

一般来说,我怎样才能开始学习更高效的代码?我以为我可以提前开始流程图 - 因为通常我只是开始写作并在现场更改内容。我觉得我的所有代码都很难看,所以任何提示都会受到赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

import six

tabledata = [['apples', 'oranges', 'cherries', 'banana'],
             ['Alice', 'Bob', 'Carol', 'David'],
             ['dogs', 'cats', 'moose', 'goose']]
def printtable():
    widths = []

    for row in tabledata:
        widths.append(max(*map(len,row)))

    inverted = map(list, six.moves.zip_longest(*tabledata, fillvalue=' '))

    for row in inverted:
        for j,word in enumerate(row):
            w = widths[j]
            l = len(word)
            print ' '*(w-l)+word+' ',
        print

缩小反转部分。另外打印' ' *(w-l)用于右边的空格。你也可以尝试做一些中心对齐,这只是为了好玩。

同样要回答你的问题,你需要练习很多并理解所有python的数据结构,比如列表特别是列表推导,map,lambdas,* operator等。你可以看到我已经使用过它们了在我的回答中,我总是尽量使你的代码成为' pythonic'尽可能:-P

此外,在迭代列表时,如果for a in arr:,则始终使用for i,a in enumerate(arr)i in range()。它看起来好多了