我需要一个支持FAST插入和删除(键,值)对的数据结构,以及"获取随机密钥",它与random.choice(dict.keys())的字典相同.我在互联网上搜索过,大多数人似乎对random.choice(dict.keys())方法感到满意,尽管它是线性时间.
我知道可以更快地实现这个:
有没有简单的方法在Python中获得这个?好像应该有!
我有2个非常相关的问题.一个实际的,与我所遇到的真正问题有关,还有一个理论问题.让我从后者开始:
一般来说,在回调或承诺中产生收益并没有多大意义.问题(以及其他问题)是在多个产量之间可能存在竞争,无法判断发电机何时结束等.
function* this_is_nonsense() {
setTimeout(() => { yield 'a'; }, 500);
setTimeout(() => { yield 'b'; }, 500);
return 'c';
}
Run Code Online (Sandbox Code Playgroud)
当使用async/await时,这些问题似乎实际上已经消失了
function timeout(ns) {
return new Promise((resolve) => setTimeout(resolve, ns));
}
async function* this_could_maybe_make_sense() {
// now stuff is sequenced instead of racing
await timeout(500);
yield 'a';
await timeout(500);
yield 'b';
return 'c';
}
Run Code Online (Sandbox Code Playgroud)
我假设目前没有这样的事情(如果错误请纠正我!).所以我的第一个问题是,使用async/await生成器是否存在概念性问题?如果没有,是否在任何路线图上?似乎实现需要的不仅仅是将两个功能混合在一起.
这是我所拥有的真实代码问题的人为版本.
想象一下编写一个遍历维基百科的函数,从一些任意页面开始并反复跟随链接(无论如何 - 可以是深度优先,广度优先还是其他东西).假设我们可以异步爬行维基百科页面以获取链接页面.就像是:
async function traverseWikipedia(startLink) {
const visited = {};
const result = [];
function …Run Code Online (Sandbox Code Playgroud) javascript generator async-await ecmascript-6 ecmascript-next