【发布时间】:2020-09-29 10:18:39
【问题描述】:
我已经用下面的代码解决了Word Break的问题:
def wordBreak(self, s: str, wordDict: List[str]) -> bool:
n = len(s)
dp = [False] * n
for i in range(n):
for j in range(i + 1, n + 1):
if (s[i : j] in wordDict) and (i == 0 or dp[i - 1]):
dp[j - 1] = True
return dp[n - 1]
我正在尝试将其编写为列表理解,以使其“或多或少一行代码”。
我一直在尝试将dp表达如下:
dp = [True if (s[i:j] in wordDict) and (i==0 or dp[i-1]) for j in range(i+1, n+1) for i in range(n) else False]
但是,我有点卡住了,因为在原始代码中它设置为dp[j - 1] = True,而我无法通过列表理解来实现。
我知道编写一大段代码作为列表理解不是一个好主意(我也很困惑),但这只是为了教育目的。
非常感谢任何有关正确编写此列表理解的帮助。
【问题讨论】:
-
您能否提供您提供给代码的示例输入?目前还不清楚您的代码是做什么的。
-
@AmitSingh 添加了问题的链接。
-
列表理解的主要要求是可以访问一个可迭代对象,因此除非您以某种方式将其转换为可迭代对象,否则很难用正确的方法实现您想要做的事情。因此,我们将不得不重写您可能会多次更改
d[j-1]值的部分。 -
按原样,这不能重写为列表推导,因为您在循环中引用了
dp[i - 1]。作为一个列表推导,变量dp甚至不会在那个时候被声明。
标签: python for-loop list-comprehension dynamic-programming