我有一对嵌套循环,其中内部循环内部的操作取决于两个循环元素。
def ngram(inp='', mn=2, mx=60):
"""
EG inp='the' => ['th', 'the', 'he']
"""
out = []
for i in range(0, len(inp) + 1 - mn):
for j in range(i + mn, min(i + mx + 1, len(inp) + 1)):
out.append(inp[i:j])
return out
我以为我会把它变成列表理解而不是重复的append
,但是我似乎无法弄清楚扩展时如何引用外部i
内部j
。
我要从中得到的东西:
[[i, [j for j in range(i + mn, min(i + mx + 1, len(inp) + 1))]]
for i in range(0, len(inp) + 1 - mn)]
inp='the'
mn=2
和mx=60
何时产生:[[0, [2, 3]], [1, [3]]]
具有生产[inp[0:2], inp[0:3], inp[1:3]]
的正确信息
带我去
[[inp[i:j] for j in range(i + mn, min(i + mx + 1, len(inp) + 1))]
for i in range(0, len(inp) + 1 - mn)]
哪个是:[['th', 'the'], ['he']]
但是应该可以在上面的语句中将其展平,而无需将其包围:
[g for lst in […above…] for g in lst]
可以在前一步以某种方式将其展平吗?
答案 0 :(得分:3)
您可以这样做:
result = []
for sub_1 in collection:
for sub_2 in sub_1:
…
for sub_n in sub_(n - 1):
result.append(element)
通常,只要您有以下形式的for循环:
list
您可以构建以下形式的等效[element for sub_1 in collection for sub_2 in sub_1 … for sub_n in sub_(n - 1)]
理解:
.enableReactPreset()
答案 1 :(得分:2)
怎么了?
def ngram(inp='', mn=2, mx=60):
return [
inp[i:j]
for i in range(0, len(inp) + 1 - mn)
for j in range(i+mn, min(i + mx + 1, len(inp) + 1))
]