【问题标题】:Initialize complex nested lists in Python in many lines?在 Python 中用多行初始化复杂的嵌套列表?
【发布时间】:2017-06-08 00:36:54
【问题描述】:

Python 需要缩进。那么,如何内联初始化复杂的嵌套对象呢?

我应该把它们写成一行吗

rewards = [[-0.04, -0.04, -0.04, -0.04], [-0.04, 0, -0.04, -0.04], [-0.04, -0.04, -0.04,-0.04]]

或者我可以用某种方式包装它们吗?

更新

我的问题不是关于打破长线,这在文档中明确写,而是关于在定义复杂嵌套结构的情况下打破长线,比如列表的字典列表。我无法相信我们应该在这里使用换行语法。

更新 1

不,它不是重复的。

【问题讨论】:

标签: python syntax indentation


【解决方案1】:

一种方法是使用:

rewards = [
    [-0.04, -0.04, -0.04, -0.04],
    [-0.04, 0, -0.04, -0.04],
    [-0.04, -0.04, -0.04,-0.04]
]

请注意,列表中用于分隔元素的任何空格都是多余的,因为词法分析器会删除它;所以这只是根据个人口味的可读性问题。

您可以将它写在一行中,但是,在使用长嵌套列表时,您很容易达到 80 个字符的限制,而且我个人认为这种表示形式对读者不友好。

【讨论】:

  • 对不起,你说得对,但我接受@theborn 的回答,因为他对我非pythonian 的解释是我错过的
  • @Dims 不用担心 :)
【解决方案2】:

在括号内,包括[{(,您可以使用任何您想要的格式。

【讨论】:

    【解决方案3】:

    您可以用尾随反斜杠包装 Python 中的任何行:

    rewards = [[-0.04, -0.04, -0.04, -0.04], \
    [-0.04, 0, -0.04, -0.04], [-0.04, -0.04, -0.04,-0.04]]
    

    这里仍然不是真正需要的,正如上一个答案中提到的那样

    【讨论】:

    • 这是一个你不需要(而且真的不应该)使用续行符的地方。
    • 不,它确实不是 :-) 你可以在不影响语义的情况下删除它——如果你想让它更具可读性,你应该做@mu 所做的事情并提供正确的语义格式;-)
    猜你喜欢
    • 2021-07-16
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多