python - 在Python中,如何设计复杂的列表理解的样式

标签 python list python-3.x list-comprehension

我正在努力应用我所学到的列表推导式并通读 Pep 8。我遇到了风格上的困境。一、代码:

# Using nested for's and conditionals
for m, row in enumerate(board):
    for n, piece in enumerate(row):
        if (piece == self.color or piece == self.Color):
            print(m, n, piece)

# Using list comprehensions
[
    [
        print(m, n, piece)
        for n, piece in enumerate(row)
        if (piece == self.color or piece == self.Color)
    ]
    for m, row in enumerate(board)
]

对我来说,我认为 Pep 8 有点倾向于嵌套 for 的方法,只是因为(对我来说)它看起来稍微更直观。也许我对列表理解的格式处理得还不够好。这是我能想到的最好的格式化方式,同时保持 79 列首选换行。

我想我现在已经很好地掌握了列表推导式,并且我认为它们绝对适合这个应用程序,但是......是否最好只是为了使用列表推导式而使用列表推导式?

也许我只需要完全重新思考我的代码架构?我不希望 SO 对此提出这样的建议(!),但也许对上面显示的哪种方法的一些见解对于 Python 爱好者来说会更好!

编辑:推荐的重复问题(在创建问题时没有在推荐的重复问题中看到此弹出,否则我不会问!:D)完美地解决了这个问题。我想我应该更多地了解列表理解的“副作用”的含义,因为我的问题显然就是这种情况。

Here's the duplicate link如果重复标记被删除:

一如既往,感谢您的精彩回答!

最佳答案

我认为上述方法具有更好的可读性。 列表推导生成列表并不是为了做某事......这只是副作用。

for m, row in enumerate(board):
    for n, piece in enumerate(row):
        if piece == self.color or piece == self.Color:
            print(m, n, piece)

够了。

或者您必须使用列表推导式,然后生成列表并像这样打印它。

result = [
    [
        (m, n, piece)
        for n, piece in enumerate(row)
        if piece == self.color or piece == self.Color
    ] 
    for m, row in enumerate(board)
]
print (result)

for res in result:
    m, n, piece = res
    print (m, n, piece)

关于python - 在Python中,如何设计复杂的列表理解的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45203870/

相关文章:

python - 如何在Python中创建具有任意数量关键字参数的单例对象?

python - 从 python 中现有的 dict 列表中获取子集 dict 的列表

python - 从字符串列表中删除空白字符串值

python - 在不失去值(value)重要性的情况下进行扩展 Python Sklearn

Python3 : Trying to upgrade pip3 in Ubuntu 16. 04 但它不更新

list - Haskell: "list comprehension"是否使用急切求值?

python - 如何根据预定义列表排列set的输出

python-3.x - numpy中的局部均值过滤器

python-3.x - 如何在 win32 错误消息中读取 EXCEPINFO 元组?

javascript - 如何在不使用 "linebreaksbr"模板过滤器的情况下在 Django 模板中显示换行符?