我觉得这段代码过多了 - 怎么可能更短?我是初学者所以请耐心等待。
The problem statement is this (from Automate the Boring stuff)
我的代码:
row_number() over (partition by
一般来说,我怎样才能开始学习更高效的代码?我以为我可以提前开始流程图 - 因为通常我只是开始写作并在现场更改内容。我觉得我的所有代码都很难看,所以任何提示都会受到赞赏。谢谢!
答案 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()
。它看起来好多了