标签: flatten

Python 3替换了不推荐使用的compiler.ast展平函数

弃用编译器包以来,推荐使用嵌套列表的方法是什么?

>>> from compiler.ast import flatten
>>> flatten(["junk",["nested stuff"],[],[[]]])
['junk', 'nested stuff']
Run Code Online (Sandbox Code Playgroud)

我知道有一些堆栈溢出答案用于列表展平,但我希望pythonic,标准包,"一个,最好只有一个,显而易见的方法"来做到这一点.

python flatten python-3.x

10
推荐指数
2
解决办法
5781
查看次数

如何压扁夹紧的阵列

在那一刻,我发现自己陷入了试图压扁Uint8ClampedArray的困境.

起始数组结构是data = [227, 138, 255…]在创建一个类似的数组后,enc = [Uint8ClampedArray[900], Uint8ClampedArray[900], Uint8ClampedArray[900]...]我尝试将其展平.

我尝试了很多方法/解决方案,但似乎没有人工作:

MDN建议的方法

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
  return a.concat(b);
}, []);
Run Code Online (Sandbox Code Playgroud)

与concat

data = [].concat.apply([], enc);
Run Code Online (Sandbox Code Playgroud)

并通过一个功能

function flatten(arr) {
  return arr.reduce(function (flat, toFlatten) {
    return flat.concat(Array.isArray(toFlatten) ? flatten(toFlatten) : toFlatten);
  }, []);
}
Run Code Online (Sandbox Code Playgroud)

但到目前为止还没有任何快乐,它不断回归阵列.任何人都可以指出我正确的方向并解释为什么会这样?

-EDIT-底线:我需要它来返回一个常规的Array对象,就像未键入的起始对象一样.

javascript arrays flatten multidimensional-array

10
推荐指数
1
解决办法
776
查看次数

*为什么*列表赋值会使其左侧变平?

我知道列表赋值会使其左侧变平:

\n
my ($a, $b, $c);\n($a, ($b, $c)) = (0, (1.0, 1.1), 2);\nsay "\\$a: $a"; # OUTPUT: \xc2\xab$a: 0\xc2\xbb\nsay "\\$b: $b"; # OUTPUT: \xc2\xab$b: 1 1.1\xc2\xbb    <-- $b is *not* 1\nsay "\\$c: $c"; # OUTPUT: \xc2\xab$c: 2\xc2\xbb        <-- $c is *not* 1.1\n
Run Code Online (Sandbox Code Playgroud)\n

我也明白我们可以用来:($a, ($b, $c)) := (0, (1.0, 1.1))获得非扁平化行为。

\n

我不明白的是为什么在列表分配期间左侧被展平。这是两个问题:首先,这种扁平化行为如何与语言的其余部分相适应?其次,自动展平是否允许任何在左侧不展平时不可能出现的行为?

\n

关于第一个问题,我知道 Raku 历史上有很多自动扁平化行为。在Great List Refactor之前,像这样的表达式my @a = 1, (2, 3), 4会自动展平其右侧,从而产生 Array [1, 2, 3, 4];同样,map许多其他迭代结构也会使他们的论点变得扁平化。不过,在 …

destructuring variable-assignment flatten assignment-operator raku

10
推荐指数
1
解决办法
172
查看次数

Erlang:展平字符串列表

我有一个这样的列表:

[["str1","str2"],["str3","str4"],["str5","str6"]]
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为

["str1", "str2", "str3", "str4", "str5", "str6"]
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

问题是我正在处理字符串列表,所以当我这样做

lists:flatten([["str1","str2"],["str3","str4"],["str5","str6"]])
Run Code Online (Sandbox Code Playgroud)

我明白了

"str1str2str3str4str5str6"
Run Code Online (Sandbox Code Playgroud)

但是,如果原始列表的元素只是原子,那么lists:flatten就会给我我需要的东西.如何用字符串实现相同的功能?

erlang list flatten

9
推荐指数
1
解决办法
5431
查看次数

用于展平SVG嵌套转换的工具

我想知道是否有任何命令行工具可以在SVG中使用转换来展平嵌套组?

在我的特定情况下,我正在将CAD软件生成的PDF转换为SVG,然后添加一些元素并将修改后的SVG发布到网页以供查看.SVG的响应时间非常缓慢(用于平移和缩放),我发现这是由于SVG内部有大量嵌套组,通常高达几百个深度.对于SVG中的每个元素,浏览器需要计算其所有父节点的位置......

显然这很荒谬,因为所有这些元素都需要一个单一的转换(矩阵).所以我想知道是否有人知道一个工具来压扁这个(或者C#或Delphi实现会这样做......).

svg nested transformation flatten

9
推荐指数
2
解决办法
3382
查看次数

在Perl6中向数组附加多个值

我正在寻找一种方法将多个值附加到@array.该文档指出,有一个名为.append的方法可以完成这项工作.但是当我做这样的事情时:

my @array = <a b>;
my @values = 1,2,3;
@array.append: @values, 17;
Run Code Online (Sandbox Code Playgroud)

我得到一个嵌套的结果:

[a b [1 2 3] 17]
Run Code Online (Sandbox Code Playgroud)

arrays nested append flatten perl6

9
推荐指数
1
解决办法
183
查看次数

Python Numpy追加数组而不展平

在 Python 3 中,我在循环中导入多个数据文件,我希望能够将所有数据存储在一个二维数组中。我从类似的东西开始,data = np.array([])在每次迭代中我想添加一个新数组datai = np.array([1,2,3]),我怎样才能让我的最终数组看起来像这样?[[1,2,3],[1,2,3],...,[1,2,3]]

我已经尝试过 np.append、np.concatenate 和 np.stack,但似乎都不起作用。我正在尝试的示例代码:

data = np.array([])
for i in range(datalen):
    datai = *func to load data as array*
    data = np.append(data, datai)
Run Code Online (Sandbox Code Playgroud)

但当然这会返回一个扁平的数组。有什么办法可以得到一个二维长度数组,datalen每个元素都是数组datai

谢谢!

python arrays numpy append flatten

9
推荐指数
2
解决办法
4908
查看次数

将邻接列表层次结构展平为所有路径的列表

我有一个表使用Adjacency List模型存储分层信息.(使用自引用键 - 下面的示例.此表可能看起来很熟悉):

category_id name                 parent
----------- -------------------- -----------
1           ELECTRONICS          NULL
2           TELEVISIONS          1
3           TUBE                 2
4           LCD                  2
5           PLASMA               2
6           PORTABLE ELECTRONICS 1
7           MP3 PLAYERS          6
8           FLASH                7
9           CD PLAYERS           6
10          2 WAY RADIOS         6
Run Code Online (Sandbox Code Playgroud)

将上述数据"压扁"成这样的东西的最佳方法是什么?

category_id lvl1        lvl2        lvl3        lvl4
----------- ----------- ----------- ----------- -----------
1           1           NULL        NULL        NULL
2           1           2           NULL        NULL
6           1           6           NULL        NULL
3           1           2           3           NULL
4           1 …
Run Code Online (Sandbox Code Playgroud)

sql hierarchy flatten adjacency-list

8
推荐指数
2
解决办法
9763
查看次数

如何拼合异构列表(也就是......的元组元组)

我试图使用C++ 17折叠表达式和C++ 14索引技巧来压缩由元组和非元组组成的任意输入.

预期结果至少应符合以下要求:

constexpr auto bare = 42;

constexpr auto single = std::tuple{bare};
constexpr auto nested_simple = std::tuple{single};

constexpr auto multiple = std::tuple{bare, bare};
constexpr auto nested_multiple = std::tuple{multiple};

constexpr auto multiply_nested = std::tuple{multiple, multiple};

static_assert(flatten(bare) == bare);
static_assert(flatten(single) == bare);
static_assert(flatten(nested_simple) == bare);

static_assert(flatten(multiple) == multiple);
static_assert(flatten(nested_multiple) == multiple);

static_assert(flatten(multiply_nested) == std::tuple{bare, bare, bare, bare});
Run Code Online (Sandbox Code Playgroud)

除了最后一种情况,我有相对简单的代码来处理所有情况:

template<typename T>
constexpr decltype(auto) flatten(T&& t)
{
    return std::forward<T>(t);
}

template<typename T>
constexpr decltype(auto) flatten(std::tuple<T> t)
{
    return std::get<0>(t);
}

template<typename... Ts> …
Run Code Online (Sandbox Code Playgroud)

c++ tuples flatten perfect-forwarding c++17

8
推荐指数
2
解决办法
338
查看次数

如何展平嵌套的结果?

我正在使用一个第三方库,该库提供了我必须“按原样”使用的基于树的数据结构。API 返回Result<T, Error>. 我必须进行一些顺序调用并将错误转换为我的应用程序的内部错误。

use std::error::Error;
use std::fmt;

pub struct Tree {
    branches: Vec<Tree>,
}

impl Tree {
    pub fn new(branches: Vec<Tree>) -> Self {
        Tree { branches }
    }

    pub fn get_branch(&self, id: usize) -> Result<&Tree, TreeError> {
        self.branches.get(id).ok_or(TreeError {
            description: "not found".to_string(),
        })
    }
}

#[derive(Debug)]
pub struct TreeError {
    description: String,
}

impl Error for TreeError {
    fn description(&self) -> &str {
        self.description.as_str()
    }
}

impl fmt::Display for TreeError {
    fn fmt(&self, f: &mut fmt::Formatter) …
Run Code Online (Sandbox Code Playgroud)

error-handling flatten rust

8
推荐指数
1
解决办法
3944
查看次数