gpt4 book ai didi

python - 列表理解的意外输出

转载 作者:太空狗 更新时间:2023-10-30 01:47:41 27 4
gpt4 key购买 nike

我有一个输入列表如下:

test_list = ['a', ('abc', 'd'), ['efgh', 'i'], 'jkl']

我需要将其展平,因此摆脱元组和列表分别作为 test_list 的第二个和第三个元素

预期输出:

['a', 'abc', 'd', 'efgh', 'i', 'jkl']

我在为此找到正确的列表理解时遇到问题。我试过以下两个例子:

result = [xs if type(xs) is str else x for xs in test_list for x in xs]
print('result', result)
# this outputs:
# ['a', 'abc', 'd', 'efgh', 'i', 'jkl', 'jkl', 'jkl']

result = [x if ((type(xs) is list) or (type(xs) is tuple)) else xs for xs in test_list for x in xs]
print('result',result)
#this also outputs:
# ['a', 'abc', 'd', 'efgh', 'i', 'jkl', 'jkl', 'jkl']

如您所见,它确实“展平”了列表,但它根据最后一个元素中的字符数重复了最后一个元素。例如,如果 test_list 的最后一个元素是 'jklm',那么在 result 中,最后一个元素重复 4 次。

我想知道是否有一个列表推导式可以在不重复最后一个元素的情况下将我的输入列表展平为预期的输出。

最佳答案

下面的嵌套理解将起作用:

[x for sub in test_list for x in (sub if isinstance(sub, (list, tuple)) else [sub])]

这使用 isinstance 应该优先于 type(...) 并且可以被赋予多种类型。如果任何顶级元素不是列表或元组,则将其包装在列表中。

关于python - 列表理解的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48063772/

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