【问题标题】:In python, how to style a complicated list comprehension [duplicate]在python中,如何设置复杂的列表理解的样式[重复]
【发布时间】:2017-07-20 02:02:23
【问题描述】:

我正在努力应用我所学到的关于列表理解的知识并通读 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 col 首选包装。

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

也许我只需要彻底重新考虑我的代码架构?我不希望 SO 对此提出这样的建议(!),但也许对上面显示的哪种方法更适合 Pythonistas 的一些见解!

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

Here's the duplicate link 以防重复标记被删除:

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

【问题讨论】:

  • 不建议对副作用使用列表推导。只需使用循环。
  • 由于列表理解中的打印,您发布的代码给出了语法错误。你的意思可能是print [[(m,n,piece) for ... ]]
  • @user55449 你确定你使用的是正确版本的python吗?
  • 不,你是对的。也许应该添加一个 Python 3 标签。
  • 如果不是你写的,你更愿意读哪一本?

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


【解决方案1】:

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

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2022-11-23
    • 2021-04-20
    • 1970-01-01
    • 2011-06-15
    • 2017-04-07
    • 2021-07-04
    相关资源
    最近更新 更多