【发布时间】:2012-06-24 09:16:33
【问题描述】:
在使用循环时,我经常会两次编写一些代码。例如,在学习 Udacity 计算机科学课程时,我编写了代码(用于查找顺序重复次数最多的元素的函数):
def longest_repetition(l):
if not l:
return None
most_reps = count = 0
longest = prv = None
for i in l:
if i == prv:
count += 1
else:
if count > most_reps:
longest = prv
most_reps = count
count = 1
prv = i
if count > most_reps:
longest = prv
return longest
在这种情况下,如果计数大于先前重复次数最多的元素,我会检查两次。当当前元素与最后一个元素不同时以及当我到达列表末尾时都会发生这种情况。
在逐个字符解析字符串时,我也遇到过几次。也有几次它已经达到大约 5 行代码。这是常见的,还是我思考/编码方式的结果。我该怎么办?
编辑:类似地,在一个人为的字符串拆分示例中:
def split_by(string, delimeter):
rtn = []
tmp = ''
for i in string:
if i == delimeter:
if tmp != '':
rtn.append(tmp)
tmp = ''
else:
tmp += i
if tmp != '':
rtn.append(tmp)
return rtn
edit:本考试是为本课程的学生编写的,他们预计不会有任何 Python 外部知识;只有在前面的单元中教过的东西。尽管我之前确实有 Python 方面的经验,但我正在努力遵守这些限制以充分利用这门课程。诸如 str.split、列表和 Python 的许多基础知识之类的东西都被教授了,但还没有关于导入的东西——尤其是诸如 groupby 之类的东西。话虽如此,如果没有编程入门课程中可能不会教授的任何语言功能,它应该如何编写。
【问题讨论】:
-
请使用
if some_string:检查some_string是否为空 -
if not l是多余的。l是个坏名字。most_reps可以称为max_count以明确与count的关系。i->current,prv->last
标签: python language-agnostic code-organization