这篇文章讲述了我如何更新我的2048合并函数代码,从意大利面代码到更具可读性。
我从你的建议中吸收了一些技巧!我意识到在我的代码中有很多逻辑错误和冗余,比如为什么在没有必要的情况下一次又一次地追加0's,因为最后我回过头来解释丢失的数字,然后添加0(s)代替它们。
新代码与旧代码的
)
if(s),else(s)等)extend )注入我的代码中def merge(nums):
'''
Takes a list as input
returns merged pairs with
non zero values shifted to the left.
fancy interactive doc test below, no output means no problems.
>>> merge([2, 0, 2, 4])
[4, 4, 0, 0]
>>> merge([0, 0, 2, 2])
[4, 0, 0, 0]
>>> merge([2, 2, 0, 0])
[4, 0, 0, 0]
>>> merge([2, 2, 2, 2, 2])
[4, 4, 2, 0, 0]
>>> merge([8, 16, 16, 8])
[8, 32, 8, 0]
'''
slide = [num for num in nums if num]
pairs = []
for idx, num in enumerate(slide):
if idx == len(slide)-1:
pairs.append(num)
break
elif num == slide[idx+1]:
pairs.append(num*2)
slide[idx+1] = None
else:
pairs.append(num) # Even if not pair you must append
slide = [pair for pair in pairs if pair]
slide.extend([0] * (len(nums) - len(slide)))
return slide
if __name__ == '__main__':
import doctest
doctest.testmod()皮林特对我大喊大叫,因为我用i而不是idx。
发布于 2015-09-13 07:45:05
我没有查看或看到您的旧代码时,它是张贴,但这是明显的改进。不过,我仍可以提出一些建议:
num和nums不是很好的变量名。字符很便宜,只需完整地写出单词number。我还建议给numbers一个稍微不同的/更长的名称,以便更容易地阅读定义slide的行。同样,我认为pair/pairs可能会更容易阅读。merge.__doc__,那么提到doctest“下面”可能会让人感到困惑。https://codereview.stackexchange.com/questions/104551
复制相似问题