将python代码整理/格式化为一行

时间:2018-10-08 16:59:50

标签: python list for-loop nested

有什么方法可以在一行中重写以下python代码

for i in range(len(main_list)):
  if main_list[i] != []:
   for j in range(len(main_list[i])):
     main_list[i][j][6]=main_list[i][j][6].strftime('%Y-%m-%d')

如下所示,

 [main_list[i][j][6]=main_list[i][j][6].strftime('%Y-%m-%d') for i in range(len(main_list)) if main_list[i] != [] for j in range(len(main_list[i]))]

我为此收到了SyntaxError。

实际上,我正在尝试将从表中获取的所有值存储到一个列表中。由于表包含日期方法/数据类型,因此我需要将其转换为字符串,因为我遇到格式错误的字符串错误。

所以我的方法是将list的该元素从datetime.date()转换为str。而且我的工作。只希望它能与一行配合工作

3 个答案:

答案 0 :(得分:3)

使用显式for循环。没有更好的选择。

列表理解用于创建列表,而不是修改现有列表的某些元素。

您可能可以通过列表理解来更新值,例如[L.__setitem__(i, 'some_value') for i in range(len(L))],但是不建议您这样做,因为您使用的是副作用,并且在创建None值列表之后将其丢弃。

您还可以使用三元语句编写卷积列表理解,该语句表示何时遇到第三嵌套子列表中的第六元素。但这会使您的代码难以维护。

简而言之,请使用for循环。

答案 1 :(得分:1)

您收到语法错误,因为不允许您在列表理解范围内执行分配。 Python禁止分配,因为它不鼓励使用复杂的列表理解,而赞成使用for循环。

很明显,您不应该在一行上执行此操作,但这是这样做的方法:

this.lastVisible

列表理解是功能性的事情。如果您知道map()如何在python或javascript中工作,那是同一回事。在map()或理解中,我们通常不会更改正在映射的数据(并且python不鼓励尝试),因此,我们重新创建了整个对象,只替换了我们想要修改的值。

答案 2 :(得分:0)

一行?

main_list = convert_list(main_list)

尽管如此,您将不得不在其他地方放置几行:

def convert_list(main_list):
    for i, ml in enumerate(main_list):
        if isinstance(ml, list) and len(ml) > 0:
            main_list[i] = convert_list(ml)
        elif isinstance(ml, datetime.date):
            main_list[i] = ml.strftime('%Y-%m-%d')
    return main_list

您也许可以将其与列表理解一起使用,但这是一个糟糕的主意(出于其他原因可以更好地解释原因)。

相关问题