如何在Python中重构四个缩进级别?

时间:2016-04-11 18:20:14

标签: python

我有一份表单列表:

items = [["Wello \nWorld", "roboto.ttf", "rgb(0,0,0)"], ["StackOverflow is awesome", "roboto.ttf", "rgb(255,255,255)"]]

我想要做的是回顾每个list ...声明变量textfontcolor。之后,如果文本上有\n个字符,则将文本拆分为行,然后将这些行分隔成单词以对其进行处理。

这是我为实现这一目标而提供的代码。

def wrap(self, size):
    for section in sections:
        for text, font, color in section:
            for line in text.splitlines():
                for word in line:
                    pass

我知道这个功能是错误的。如果没有错,那么世界就错了。这种级别的缩进看起来很丑陋,真的希望你们能帮助我以另一种方式表达它。或者数据可能是错误的结构?

还有一件事:

我从The Zen of Python 读到:

  

Flat比嵌套好。

这适用于我的问题吗?我打赌它确实如此,但我正在阅读Google Groups上的一些内容,当引用 Flat优于嵌套时,人们倾向于引用Python包和继承层次结构。

1 个答案:

答案 0 :(得分:3)

“Flat优于嵌套”指的是保持数据结构简单并避免在另一个中嵌套太多对象。在你的情况下,你有一个列表列表,所以这只是两个不太糟糕的级别。实际上,你有一个三元组的列表(是的,“元组”是一个列表,但它仍然是一个固定的大小),所以它真的没有问题。

由于您只有一个级别,因此只需要一个for循环即可访问该元组。然后您可以解压缩元组以访问这些元素并进一步处理text

for section in items:
    text, font, color = section
    text = text.splitlines()
    print(text, font, color)

这会给你:

['Wello ', 'World'] roboto.ttf rgb(0,0,0)
['StackOverflow is awesome'] roboto.ttf rgb(255,255,255)

根据您希望进一步处理这些值的内容,您可能需要再添加一个嵌套来遍历文本行,但这不是问题,所以您可以这样做。