如何通过列表理解来表达?新手需要帮助。非常感谢。 下面的代码:
OnPost()
答案 0 :(得分:9)
这不适合列表理解,但是当您没有列表时,可以通过特殊包装将此类元素包装在列表中进行迭代,从而实现此目的:
result = [num for elem in lst for num in ([elem] if not isinstance(elem, list) else elem)]
与您所使用的相同,再加上一个额外的变量来调用我使用的条件表达式,它等效于:
result = []
for elem in lst:
_nested = [elem] if not isinstance(elem, list) else elem
for num in _nested:
result.append(num)
您可能希望在生成器函数中封装平整不规则结构:
def flatten(irregular_list):
for elem in irregular_list:
if isinstance(elem, list):
yield from elem
else:
yield elem
,然后将其用于列表推导及其他操作。对于扁平化而言,将生成器函数传递给list()
会更干净,例如result = list(flatten(lst))
。
答案 1 :(得分:2)
Martin Pieters (here)的答案很棒,但是我想在答案的最终代码示例中建议
def flatten(irregular_list):
for elem in irregular_list:
if isinstance(elem, list):
yield from elem
else:
yield elem
如果我们将其调整为
def flatten(irregular_list):
for elem in irregular_list:
if isinstance(elem, list):
yield from flatten(elem)
else:
yield elem
然后,即使问题列表包含多个列表或“列表中的列表”元素,它也可以展平以给出仅包含非列表元素的列表结果。
PS:我本来只是要评论这个东西,但是我发现我没有足够的声誉。