Skip to main content
 首页 » 编程设计

python之关于防止代码重复的代码结构建议(Python、列表)

2025年05月04日14sky-heaven

当前的场景是我有一个有序的项目列表。我想将该列表转换为单个字符串。

但是。

这不仅仅是将每个项目转换为字符串并连接起来的问题。作为转换的一部分,我需要对列表进行一些处理。

这是一个粗略的例子:

列表:

[1,  
 2, 
 3, 
 0, 
 1, 
 9, 
 -4, 
 3, 
 2] 

我想要的输出是这样的:

The total of a group is 6. 
The total of a group is 10. 
The total of a group is 5. 

这是我编写的可以执行此操作的代码:

total = 0 
result = "" 
for item in myList: 
    if (item <= 0): 
        result += "The total of a group is %d.\n" % total 
        total = 0 
        continue 
    total += item 
 
# NOTICE THE CODE DUPLICATION HERE... 
result += "The total of a group is %d.\n" % total 
 
print result 

问题是我在代码中有 result += 两次。这样做的原因是我们无法保证列表中的最后一项是将导致实际附加字符串的代码执行的项目。 (即,我们无法保证它是 0 或更小的数字。)

对此的明显解决方案可能是“检查列表中的最后一项,如果它不 <= 0,则添加 0 作为最后一项。”这将适用于像这样的原语列表。然而,它不适用于对象列表或复杂类型,或者如果比较涉及的不仅仅是 <= 0。

所以问题是:是否有一种好的方法来构建这段代码,这样我就不会重复代码,这当然会带来很大的错误可能性?

谢谢!

F

请您参考如下方法:

如果允许,您可以使用 itertools.groupby 对正数进行分组,例如:

from itertools import groupby 
 
data = [1, 2, 3, 0, 1, 9, -4, 3, 2] 
group_totals = [sum(g) for k, g in groupby(data, lambda L: L > 0) if k] 
for group_total in group_totals: 
    print 'The sum of a group is', group_total 
print 'Total of all groups is', sum(group_totals)