Python:元组和单个 float 的高效展开/展平列表

标签 python list tuples flatten

我有一个元组列表和单个 float

v = [(1., 2., 3.), (4., 5.), 6., 7.]

现在我想用良好的旧列表理解来展平它

[item for sublist in v for item in sublist]

但由于单个 float 不可迭代,因此会发生错误。展开此混合列表的最有效方法是什么?我尝试遍历列表并使用 isininstance() 但再一次,列表不可迭代。

编辑:到目前为止的时间比较

  • 使用 hstack 的 numpy 方法:每个循环 6.49 µs ± 100 ns
  • hasattr 方法:每个循环 398 ns ± 2.11 ns
  • 收集方法:每个循环 804 ns ± 1.27 ns

最佳答案

您可以使用 hasattr检查对象是否可迭代(有一个 __iter__ 方法):

out = [item for sublist in v
       for item in (sublist if hasattr(sublist, '__iter__') else [sublist])]

输出:[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]

另一种方法是使用 collections.abc :

from collections.abc import Iterable
    
out = [item for sublist in v
       for item in (sublist if isinstance(sublist, Iterable) else [sublist])]   

请注意,在这两种情况下,字符串都被认为是可迭代的,您可能需要根据您的数据检查这种特定情况。

关于Python:元组和单个 float 的高效展开/展平列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72197341/

相关文章:

python - 如何减少线程 python 代码的内存使用?

Python:如何修改字典列表中的特定(键,值)对?

f# - N元元组与对

tuples - Julia - 使用单个元素创建 NTuple

f# - 如何在 F# 中使用 BlockingCollection<'a>.TryTake

python - 如何从可调用 View 渲染 Jinja2 宏?

python - pandas 数据框的包装列名称

python - 在 Pandas 数据框中合并具有相同浮点索引的行

list - 使用循环将 map 元素添加到列表

java - 在列表的某个字段上创建 addAll()