>>> from compiler.ast import flatten
>>> flatten(["junk",["nested stuff"],[],[[]]])
['junk', 'nested stuff']
Run Code Online (Sandbox Code Playgroud)
我知道有一些堆栈溢出答案用于列表展平,但我希望pythonic,标准包,"一个,最好只有一个,显而易见的方法"来做到这一点.
在那一刻,我发现自己陷入了试图压扁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对象,就像未键入的起始对象一样.
我知道列表赋值会使其左侧变平:
\nmy ($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\nRun Code Online (Sandbox Code Playgroud)\n我也明白我们可以用来:($a, ($b, $c)) := (0, (1.0, 1.1))获得非扁平化行为。
我不明白的是为什么在列表分配期间左侧被展平。这是两个问题:首先,这种扁平化行为如何与语言的其余部分相适应?其次,自动展平是否允许任何在左侧不展平时不可能出现的行为?
\n关于第一个问题,我知道 Raku 历史上有很多自动扁平化行为。在Great List Refactor之前,像这样的表达式my @a = 1, (2, 3), 4会自动展平其右侧,从而产生 Array [1, 2, 3, 4];同样,map许多其他迭代结构也会使他们的论点变得扁平化。不过,在 …
destructuring variable-assignment flatten assignment-operator raku
我有一个这样的列表:
[["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就会给我我需要的东西.如何用字符串实现相同的功能?
我想知道是否有任何命令行工具可以在SVG中使用转换来展平嵌套组?
在我的特定情况下,我正在将CAD软件生成的PDF转换为SVG,然后添加一些元素并将修改后的SVG发布到网页以供查看.SVG的响应时间非常缓慢(用于平移和缩放),我发现这是由于SVG内部有大量嵌套组,通常高达几百个深度.对于SVG中的每个元素,浏览器需要计算其所有父节点的位置......
显然这很荒谬,因为所有这些元素都需要一个单一的转换(矩阵).所以我想知道是否有人知道一个工具来压扁这个(或者C#或Delphi实现会这样做......).
我正在寻找一种方法将多个值附加到@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) 在 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?
谢谢!
我有一个表使用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) 我试图使用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) 我正在使用一个第三方库,该库提供了我必须“按原样”使用的基于树的数据结构。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)