gpt4 book ai didi

python - 如何在复合列表理解中包含条件?

转载 作者:行者123 更新时间:2023-12-05 02:27:02 25 4
gpt4 key购买 nike

我想展平列表但保留 NaN。当没有 NaN 时,以下基本代码有效:

l = [[1], [2, 3, 4], [5]]
[item for sublist in l for item in sublist]
> [1, 2, 3, 4, 5]

现在,如果我遇到以下情况,它将中断:

import numpy as np
l = [[1], [2, 3, 4], np.nan, [5]]
[item for sublist in l for item in sublist]
> TypeError: 'float' object is not iterable

这是有道理的,但我需要处理这个边界案例,我不确定如何在上面的列表理解中添加特殊案例条件。我如何修改这种理解以涵盖这种情况?

预期的输出是:

[1, 2, 3, 4, np.nan, 5]    

最佳答案

我会检查子列表是否可迭代。如果不是,则将其包装在一个元组中,然后进行展平:

import numpy as np

l = [[1], [2, 3, 4], np.nan, [5]]

[item for sublist in l for item in (sublist if hasattr(sublist, "__iter__") else [sublist])]

>>> [1, 2, 3, 4, nan, 5]

使用 itertools 中的 chain 会使它更干净一些:

from itertools import chain

list(chain(*(sublist if hasattr(sublist, "__iter__") else (sublist, ) for sublist in l)))
>>> [1, 2, 3, 4, nan, 5]

Source for checking if iterable (StackOverflow)

关于python - 如何在复合列表理解中包含条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73386235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com