我有一个数字列表:
[1, 2, 3, 4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)
我有兴趣找到一个算法,如果列表中的树列表,该算法可以对此列表中的总子项求和:
1
/ \
2 3
/ \ / \
4 5 6 7
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种能够给出的算法:
[6, 2, 2, 0, 0, 0, 0]
A = 6
B = 2
C = 2
D = 0
E = 0
F = 0
G = 0
Run Code Online (Sandbox Code Playgroud)
每个节点(叶子除外)都有两个孩子.唯一的例外是如果列表是偶数:
1
/ \
2 3
/ \ /
4 5 6
Run Code Online (Sandbox Code Playgroud)
我想避免构建一个树,然后计算每个节点的子节点数.必须有一种简单的数学方法来计算列表中的子项数量?
我刚刚开始学习Haskell,我正在尝试编写一个简单的函数,它接受一个字符串列表并反转列表中的每个字符串:
revComp :: [String] -> [String]
revComp [] = []
revComp [x] = [] ++ [reverse x]
revComp (x:xs) = revComp [xs]
Run Code Online (Sandbox Code Playgroud)
当我尝试在GHCI中加载我的代码时,我收到一个错误:
Couldn't match expected type `Char' with actual type `[Char]'
Expected type: String
Actual type: [String]
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释我的问题是什么和在哪里?非常感谢.
我正在尝试学习Haskell,而我正在尝试创建一个函数,该函数采用列表并按等效总和对子列表进行分组.这不是功课.
import Data.List
let x = [[1,2],[2,1],[5,0],[0,3],[1,9]]
let groups = groupBy (\i j -> sum i == sum j) x
Run Code Online (Sandbox Code Playgroud)
我在GHCi中获得此输出:
[[[1,2],[2,1]],[[5,0]],[[0,3]],[[1,9]]]
Run Code Online (Sandbox Code Playgroud)
我得到了[[1,2],[2,1]]分组,但没有[0,3].为什么是这样?
我怀疑我需要使用map,但我似乎无法使其工作.
我使用gaussian_kdeSciPy 中的函数来生成核密度估计:
from scipy.stats.kde import gaussian_kde
from scipy.stats import norm
from numpy import linspace,hstack
from pylab import plot,show,hist
# creating data with two peaks
sampD1 = norm.rvs(loc=-1.0,scale=1,size=300)
sampD2 = norm.rvs(loc=2.0,scale=0.5,size=300)
samp = hstack([sampD1,sampD2])
# obtaining the pdf (my_pdf is a function!)
my_pdf = gaussian_kde(samp)
# plotting the result
x = linspace(-5,5,100)
plot(x,my_pdf(x),'r') # distribution function
hist(samp,normed=1,alpha=.3) # histogram
show()
Run Code Online (Sandbox Code Playgroud)
上面的代码可以工作,但对于大量样本来说可能会非常慢。
我没有将样本存储在数组中,而是有一个包含value: counts. 例如,数组[1, 1, 1, 2, 2, 3]将在此直方图字典中编码为:
{1:3, 2:2, 3:1}。
我的问题是,如何使用字典数据结构生成核密度估计?作为输入示例,请考虑此字典,其中值 6 …
我刚刚开始学习node.js,我想学习如何使用node创建D3.js视觉效果.谁能解释我怎么能这样做呢?理想情况下,我正在寻找一个尽可能简单的示例,我可以通过代码阅读并了解如何执行此操作.我看了一些长度,但我没有找到任何可重复的例子.
我的快递路线看起来像这样:
app.get('/api/v1/username/:option', function(req, res) {
// do stuff
})
Run Code Online (Sandbox Code Playgroud)
如何修改此路由以使URL显示option(option=)的参数名称?例如:
http://localhost:8080/api/v1/johndoe/option=my-cool-option
Run Code Online (Sandbox Code Playgroud) 我有一个 Node 函数来检查文件是否存在,如果它确实存在,该函数会做一些进一步的处理。我的问题是 Node 正在检查我的文件是否存在,但它没有等待文件完成写入。在执行我的函数的其余部分之前,如何查看文件是否退出并等待文件完成写入?
var doStuff = function(filename, callback) {
// writing to file here
fs.exists(filename, function(exists) {
if (exists) {
// do stuff
callback()
}
});
});
Run Code Online (Sandbox Code Playgroud)
我看到有一个同步版本的fs.exists. 我应该用那个吗?或者我应该添加一个 setTimeout 调用来等待一小段时间,然后再在文件上执行动作?什么选择最好?
我正在实现一个 API,其中有一个需要调用的昂贵函数。我想要么记住这个函数,要么使用键值缓存来查找以前的结果。我也会考虑一个Mutex或类似的结构,但我想避免像 Redis 或 Memcached 这样的外部结构。据我所知, aMutex的缓存性能很差。如何HashMap在 actix_web 异步路由中使用键值存储(例如 a 或 memoize 函数)?现在,我正在尝试一个简单的方法HashMap,但出现此错误:can't borrow data in an Arc as mutable。
async fn index(
kv: web::Data<HashMap<&str, i64>>,
) -> Result<HttpResponse> {
dbg!(kv);
kv.insert("four", 4);
Ok(HttpResponse::Ok().json(kv)
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
let tuples: Vec<(&str, i64)> = vec![("one", 1), ("two", 2), ("three", 3)];
let mut m = tuples.into_iter().collect::<HashMap<&str, i64>>();
let mut kv = web::Data::new(m);
// move is necessary to give …Run Code Online (Sandbox Code Playgroud) 对于选项类型,我经常使用ok_or组合器返回如下错误:
let my_vec = [1,2,3];
let head = my_vec.first().cloned().ok_or(Error::MyError)?;
Run Code Online (Sandbox Code Playgroud)
我正在寻找类似的组合器或方法来处理布尔值而不是选项类型。例如:
let my_vec = [1,2,3];
let head = my_vec.is_empty().false_or(Error::MyError)?;
Run Code Online (Sandbox Code Playgroud)
我经常编写匹配来处理这个问题,但它看起来相当冗长:
let vec_is_ok = match my_vec.is_empty() {
true => Err(...),
false => Ok(())
}
vec_is_ok?;
Run Code Online (Sandbox Code Playgroud)
是否有更简洁的方法来编写类似于ok_or我可以在布尔值上使用的组合器?
给定一个有序的整数列表:
[1,3,7,8,9]
Run Code Online (Sandbox Code Playgroud)
如何查找可以从维护订单的原始列表创建的所有子列表?使用上面的示例,我正在寻找一种以编程方式生成这些序列的方法:
[[1],[3,7,8,9]]
[[1, 3],[7,8,9]]
[[1, 3, 7],[8,9]]
[[1, 3, 7, 8],[9]]
[[1, 3, 7, 8, 9]]
[[1, 3, 7], [8, 9]]
[[1], [3, 7], [8], [9]]
[[1], [3], [7, 8], [9]]
[[1], [3], [7], [8, 9]]
...
Run Code Online (Sandbox Code Playgroud)
我基本上正在寻找一种方法来生成维护订单的列表的所有排列.我可以使用以下代码生成总共只有2个子列表的所有子列表:
def partition(arr, idx):
return [arr[:idx], arr[idx:]]
l = [1,3,7,8,9]
for idx in range(1, len(l)):
groups = partition(l, idx)
print(groups)
[[1], [3, 7, 8, 9]]
[[1, 3], [7, 8, 9]]
[[1, 3, 7], [8, 9]]
[[1, 3, 7, 8], [9]]
Run Code Online (Sandbox Code Playgroud)
但是,此代码片段仅将原始列表拆分为两个,并生成所有可能的子列表,其中只有两个子列表.如何生成可以从维护订单的原始列表创建的所有可能的子列表?