小编edo*_*edo的帖子

检查字符串是否是字符串列表中的子字符串的最快方法

我有一个包含 4000 个不同名字的静态列表:因此列表的长度很大(4000),但每个字符串大约有 4 到 12 个字符(它们是名称)。

然后,我有一个从数据库中检索到的 10000 个字符串的动态列表:这些字符串可能具有任意长度。

对于 10000 个字符串中的每一个,我需要输出该字符串是否包含 4000 个名称之一,如果包含,是哪个。如果它包含多个名称,我只需要其中一个(即第一个)。此外,不太可能找到这样的名称,因此 10000 个中可能只有 10 个包含名称。

到目前为止我的代码:

names # list of 4000 short static names
fields # list of 10000 retrieved strings

def findit(element):
    for name in names:
        if name in element:
            return name
    return None

output = [findit(element) for element in fields]
Run Code Online (Sandbox Code Playgroud)

这当然有效。然而,它是完全慢的,因为它不太可能找到一个名字,并且因为我正在测试是一个子字符串而不是相等(即我不能使用二等分或其他基于排序的索引技术)。它几乎无时无刻不在扫描所有姓名列表。所以基本上,它执行大约 10000 x 4000 = 4000 万次“in”比较。

有没有优化这种搜索的算法?

python-3.x

5
推荐指数
1
解决办法
3323
查看次数

Git Pull 请求:在没有新提交的情况下将 dev 更改为 master

假设这个标准场景:

  • 两个分支,dev 和 master,引用同一个提交 C1。
  • 我向开发中提交了一些东西,比如 C2、C3、C4。
  • 我想将 dev 合并到 master 中。因此,我打开一个拉取请求(在 GitHub、GitLab、Bitbucket 等),将 dev 合并到 master 中(不压缩,不删除源分支)。
  • 我应用了拉取请求,我看到正在创建一个新的提交 C5:master 引用到 C5,dev 引用到 C4。

为什么?我想维护所有开发历史记录(所以没有挤压,C2 C3 和 C4),但是当我合并到 master 时,我希望 dev 和 master 都引用到 C4。我不认为需要创建新的提交(C4 和 C5 之间的代码差异应该是什么?它们是相同的),并且我不喜欢 dev 分支似乎位于 master 后面,而它们包含相同的代码。

您能向我解释一下为什么会这样以及是否有更好的做法吗?

git

5
推荐指数
1
解决办法
1994
查看次数

处理事件绑定中的EventEmitter错误

假设我在子组件中有此EventEmitter:

export class ImageUploadComponent {
    ...
    @Output() imageDataEvent: EventEmitter<string> = new EventEmitter<string>();
    ...
}
Run Code Online (Sandbox Code Playgroud)

根据发生的情况,此子组件可能会发出某些消息或产生错误:

...
this.imageDataEvent.emit('good');
...
this.imageDataEvent.error('wrong');
Run Code Online (Sandbox Code Playgroud)

父组件通过事件绑定监听它:

<app-image-upload (imageDataEvent)="onImageUpload($event)"></app-image-upload>
Run Code Online (Sandbox Code Playgroud)

当发出“ good”时,在父组件上调用onImageUpload,而$ event包含“ good”。

如何处理“错”案?我怎么知道事件是什么时候出错?事件绑定对好/坏事件的工作原理如何?

angular

5
推荐指数
1
解决办法
1041
查看次数

mat-table 中每行的 formGroup 数组

我有一个 formGroup 数组,其中每个元素代表一个表单。接下来我有一个 mat 表,我想要做的是将每个 tr (即每一行)生成为不同的表单,以便表的第 i 行链接到第 i 个 formGroup。因此,在第 i 行内,每个 td 元素都包含一个输入,并且该输入应链接到第 i 个 formGroup 内的 formControl。

所以基本上每一行都是一个表单,可以单独提交(每一行还有一个“提交”按钮)。

我怎样才能做到这一点?您能为我提供一个可以使用的样板吗?

编辑:这是我到目前为止所尝试的: https: //angular-dpwgzp.stackblitz.io ,我得到“错误:formControlName必须与父formGroup指令一起使用。” 另外,我不知道在每一行中放置标签的位置。

angular-material angular mat-table

5
推荐指数
1
解决办法
5244
查看次数

熊猫左连接,其中多列上的right为空

我有两只大熊猫df x和y,它们都具有相同的3列ABC(不可为空)。我需要创建一个新的df z,通过“从x减去与y的行完全相同的行”获得,即a

x left join y on x.A=y.A and x.B=y.B and x.C=y.C
where y.A is null
Run Code Online (Sandbox Code Playgroud)

我该怎么做?卡住了索引,连接,合并,联接...

例:

dataframe x
A    B    C
q1   q2   q3
q4   q2   q3
q7   q2   q9

dataframe y
A    B    C
q4   q2   q3

dataframe z
A    B    C
q1   q2   q3
q7   q2   q9
Run Code Online (Sandbox Code Playgroud)

python-3.x pandas

4
推荐指数
1
解决办法
3046
查看次数

Celery 任务返回 pydantic BaseModel 子类列表:不可 json 序列化

考虑这段代码:

from pydantic import BaseModel

class MyModel(BaseModel):
  x: int

appc = Celery(...)

@appc.task(bind=True)
def mytask(self):
    return [MyModel(x=0)]

res = mytask.delay().get()  # ERROR
Run Code Online (Sandbox Code Playgroud)

错误是:kombu.exceptions.EncodeError: TypeError('Object of type MyModel is not JSON serializable')

我尝试使用 kombu 序列化器或 pydantic 编码器,但我真的不明白出了什么问题。

python celery pydantic

4
推荐指数
1
解决办法
3473
查看次数

材质 UI 自动完成在 noOptionsText 中创建可点击的按钮

我正在使用 Material Ui Autocomplete 组件。我希望当用户输入某些内容而他没有得到任何结果时,会noOptionsText显示一个可以单击以执行某些操作的按钮:

import React from "react";
import TextField from "@material-ui/core/TextField";
import Autocomplete from "@material-ui/lab/Autocomplete";
import Button from "@material-ui/core/Button";

export default function App() {
  return (
    <Autocomplete
      options={["HELLO", "HI"]}
      renderInput={(params) => (
        <TextField {...params} label="Combo box" variant="outlined" />
      )}
      noOptionsText={
        <Button onClick={() => console.log("CLICK SUCCESSFUL")}>
          No results! Click me
        </Button>
      }
    />
  );
}
Run Code Online (Sandbox Code Playgroud)

此处按钮成功显示,但是当我单击它时,自动完成功能在按钮接收点击之前关闭。

如果我设置debug={true}强制保持菜单打开,它会起作用,但这有许多其他副作用。也尝试强制,open={true}但它仍然被关闭。

你会怎么做?

Codesandbox 演示:https ://codesandbox.io/s/vigilant-haslett-sngyb ? file =/ src/App.js

reactjs material-ui

3
推荐指数
2
解决办法
2116
查看次数

使用 Redux Toolkit 和 Typescript 反应可观察的史诗

我不确定如何使用 Redux Toolkit 和 Typescript 编写 React observable 史诗。

假设我有这个 authSlice:

import { CaseReducer, createSlice, PayloadAction } from "@reduxjs/toolkit";

type AuthState = {
  token: string,
  loading: boolean,
};

const initialState: AuthState = {
  token: "",
  loading: false,
};

const loginStart: CaseReducer<AuthState, PayloadAction<{username: string, password: string}>> = (state, action) => ({
  ...state,
  loading: true,
  token: "",
});

const loginCompleted: CaseReducer<AuthState, PayloadAction<{token: string}>> = (state, action) => ({
  ...state,
  loading: false,
  token: action.payload.token,
});

const authSlice = createSlice({
  name: 'auth',
  initialState,
  reducers: …
Run Code Online (Sandbox Code Playgroud)

typescript reactjs redux redux-observable redux-toolkit

3
推荐指数
2
解决办法
2432
查看次数

为什么 keyof T 不适用于通用对象

我想要一个具有泛型类型的函数,T该函数必须是一个对象,并且必须至少有一个名为codetype 的属性string,然后用于keyof T获取所有对象键。

为什么这是无效的?

function TableView<T extends { code: string }>() {
    return forwardRef<HTMLDivElement, { data: T[], columns: Columns<keyof T> }>(
        (props, ref) => {
Run Code Online (Sandbox Code Playgroud)

错误:

TS2344: Type 'keyof T' does not satisfy the constraint 'string'.
Type 'string | number | symbol' is not assignable to type 'string'.
Type 'number' is not assignable to type 'string'.
Run Code Online (Sandbox Code Playgroud)

在哪里:

export interface Column<T extends string> {
    field: T;
    label: string;
    align?: "left" | "center" | …
Run Code Online (Sandbox Code Playgroud)

typescript

3
推荐指数
1
解决办法
462
查看次数

与共享 yaxes 但“链接” xaxes 的阴谋

我有两组数据 - xA, yA 和 xB, yB。

我想并排绘制两个散点图,第一个散点图是 xA 与 yA,第二个是 xB 与 yB。

该图旨在显示过去(“A”组)和现在(“B”组)现象的差异。

因此,x'es 和 y'es 的限制可能非常不同,但是为了直观地比较这两组,最好 x 轴和 y 轴共享相同的比例,这样可以显示来自两组的所有数据。

我尝试使用共享 y 轴,对于 y 轴,它可以正常工作。但是,x 轴有不同的限制。如果我尝试“手动”设置 x 轴限制(即使我更喜欢自动绘图),首先会正确显示绘图,但是例如,如果我放大第一个、第二个的小方块一个仅在共享的 y 轴上调整大小,而 x 轴保持未缩放,因此情节失去意义。

如何“链接”两个图的轴?

from plotly.subplots import make_subplots
import plotly.graph_objects as go

fig = make_subplots(rows=1, cols=2,
                    shared_yaxes=True,
                    horizontal_spacing=0.02)

fig.add_trace(go.Scattergl(x=xA, y=yA, mode='markers'), row=1, col=1)
fig.add_trace(go.Scattergl(x=xB, y=yB, mode='markers'), row=1, col=2)

fig.update_layout(height=600, width=1200)

# I would prefer not to calculate limits by hand, but even if I do the zoom is …
Run Code Online (Sandbox Code Playgroud)

python plotly

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

onClick 时使用效果

我对如何将效果与应用程序逻辑一起使用感到困惑。

假设这个组件:

import React, { useEffect, useState } from "react";

export default function App() {
  const [query, setQuery] = useState('');

  useEffect( () => {
    fetch('https://www.google.com?q='+query)
    .then(response => console.log(response))
  }); // depends on what?

  return (
    <div>
      <input onChange={e => setQuery(e.target.value)} value={query} />
      <button>Ask Google about {query}</button>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

我要那个:

  • 当(且仅)用户单击按钮时,将使用输入的正确查询值运行提取
  • 如果提取仍在进行中并且用户单击,则会跳过提取但会触发效果(意思是:我故意不禁用该按钮,我希望运行效果函数,但我在该函数内部进行了检查,不要执行获取)。

问题:

  • 该效果不应在坐骑上触发(这没有任何意义)
  • 当查询更改时,效果不应触发,但如果我不将查询变量放入 useEffect 依赖项数组中,React 会抱怨(react-hooks/exhaustive-deps)
  • 当用户单击按钮时应触发该效果;我实现了这一点,例如使用 fake state isRun、 设置onClick={setIsRun(true)}、使效果取决于、在效果函数末尾[isRun]设置,并在效果函数的开头进行检查以防止从效果本身设置为 false 时由于状态改变而再次运行。这可行,但我发现它非常冗长且不舒服......setIsRun(false)if (!isRun)
  • 如果再次单击按钮(是否使用相同的query值)并且之前的获取尚未完成而不运行获取,则应该触发该效果:使用之前的解决方案,isRun它不会触发,因为isRun已经设置为 …

reactjs react-hooks

0
推荐指数
1
解决办法
2万
查看次数