V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  NoOneNoBody  ›  全部回复第 109 页 / 共 175 页
回复总数  3482
1 ... 105  106  107  108  109  110  111  112  113  114 ... 175  
2023-09-07 16:33:17 +08:00
回复了 blueboyggh 创建的主题 Python Python 如何提取两个字符串中的相同部分?
呵呵,发现自己有点钻牛角尖了,不追求 yield 和去叠加就没必要再轮询一次,可以少好多行代码

而且 itertools.accumulate 是先生成后比较,概率上无效的肯定更多,比起滑动跳过无效的,工作量更多
嗯,重练一遍
2023-09-07 14:50:13 +08:00
回复了 blueboyggh 创建的主题 Python Python 如何提取两个字符串中的相同部分?
@szdosar #49
滑动思路没有错,只是 window 的尺寸不定,从 min 到 length 都有,离不开每个 window 尺寸轮询
itertools.accumulate 在这里的作用就是自动生成不同 window 尺寸的切片,省了轮询的时间

如果尺寸固定,例如只找连续 4 个字符的匹配,5 个、6 个……都忽略,那用 pandas.series.shift 是对应最简单的思路
可惜 python 没有移动 window 概念,需要手写切片[start:end]

其实 @Pipecraft #12 写的利用正则贪婪匹配的思路是最精彩,虽然实际运行速度不如理想,但我还是忍不住要赞一个

我花了不少时间在这个上面,这个看上去是字符串问题,但实际是队列问题,如果能找到一个非常高效的方法的话,在 pandas 是非常有用的,大数据中快速寻找连续等值的片段用途多得很,所以我才写了个看上去跟字符串无不相干的 pandas 方案
2023-09-07 14:18:27 +08:00
回复了 blueboyggh 创建的主题 Python Python 如何提取两个字符串中的相同部分?
@blueboyggh #48
你是全部用了 #45 的代码吧?
他最后一句是用 next ,这个只返回第一个,改为 list(gg)是全部返回
如果想按长度排序(倒序),用 sorted(gg, key=len, reverse=True)
2023-09-07 11:37:36 +08:00
回复了 blueboyggh 创建的主题 Python Python 如何提取两个字符串中的相同部分?
@blueboyggh #41
不对
1.交换 s/ss 那行缩进多了,但不影响
2.从 sss.reverse()开始到结束,都是在第一个 for 内部的,所以全部需要再增加缩进一层
2023-09-06 17:47:40 +08:00
回复了 Illusionary2233 创建的主题 Python 请教大佬们。数据处理需求,详情见下
pandas 可以用 StringIO 读入的
你可以先把 txt 拆分存入不同的 io 对象,各自读取、合并

当然也可以一次读入 txt ,然后找到机构所在行,处理并建 multi-index ,然后 drop 掉这些行
2023-09-06 17:36:47 +08:00
回复了 briancyan 创建的主题 Windows Windows 翻译软件推荐提问
@mathison #5
应该是弃坑了,之前好久没更新,更坏的想法新冠带走了

@qcts33 #2
+1 ,pot 更新还要提权 admin ,有点搞不懂
2023-09-06 17:27:27 +08:00
回复了 nbafive 创建的主题 问与答 国际象棋有爱好的吗?怎么学好
都是残局开始,因为残局只有两三个棋子,步数、方向是可以纯脑力计算的,部分有决胜步(这个要背书记忆的)
残局-->中局-->开局
开局虽然有一些固定走法,前人已经验证并总结了各自的优缺点,照背即可;但还是需要在脑内做一番布局,广度深度都需要费脑子
2023-09-06 16:55:15 +08:00
回复了 GCP 创建的主题 生活 电蒸锅 是智商税吗?
产业分工,厨房工作也分工,工具也分工

说简单点就是生活的方式不同,活得是否“精致”,如果价格不算离谱,都没什么

记得多年前这里有一帖说 5 美元买个指甲钳用几年真香,这个 op 就是活得精致的人;我街边一元购,回来消毒一下也用了几年,能互相说对方智商税么?

我妈多年之前一直想买个滤油壶,就是壶嘴在最底部那种,就是把汤倒进去,油在上面,从底部把汤倒出来,把油留在壶里;当年这东西日本很多,国内鲜见,现在就不同了,同类商品很多了,也便宜,感觉就是市场需求决定
2023-09-06 16:09:23 +08:00
回复了 blueboyggh 创建的主题 Python Python 如何提取两个字符串中的相同部分?
@Pipecraft
正则的表现让我有点失望,本以为正则比循环快,实测不是
不过你写的这个正则很精彩,我留下了,其他地方有用,先谢

@blueboyggh
下面两个是我之前写的,效率还可以

下面两个 if minlen>l: return [] 及相关可以省略,因为我的应用场景有词语,不少是“没必要比较”的,所以直接返回空。如果基本是长句,这个判断反而没必要
==================
def matchSubstrings(s:str, ss:str, minlen:int=2, reverse:bool=False):
'''
按出现先后顺序,寻找 s 中,与 ss 任意子串相同的子串\n
叠加的部分只选首个匹配,例如 638 vs 63/38 -> 只返回 63\n
minlen: int 最短匹配长度\n
reverse: bool->True 反向,寻找目标为 ss ,参考为 s
'''
if reverse: s, ss = ss, s
ac = itertools.accumulate
l = len(s)
if minlen>l: return []
lll, pos = 0, 0
for i in range(l - minlen + 1):
sss = [x for x in ac(s[i:])]
sss.reverse()
ll = len(sss)
for j,x in enumerate(sss[:ll - minlen + 1]):
if j>ll-lll and i<pos+lll: break
if x in ss:
lll = len(x)
pos = i
yield x
break
==================
缩进自行处理,基本是遇到冒号结尾的,后面的都向右缩进,没有向左回退的,大概能看懂
1. 说明中的“叠加”情况是比较麻烦的,如果需求不同,写法就不同了
2. 这个主要考虑“顺序”,是全匹配;匹配长度优先是另一种写法,需要 itertools.accumulate(s[::-1])类似,但思路有点区别,参照#6 ;长度优先可以适时 break 只返回“最长匹配”

下面这个是基于 numpy 和 pandas 的,因为是向量函数列操作,所以是全匹配,如果只需要“最长”的话,在某个 yield 后打 break ,或者要在返回结果中再筛选
===================
def rollingByNumpy(s:pd.Series, window):
v = np.lib.stride_tricks.as_strided(s, (len(s) - (window - 1), window), (s.values.strides * 2))
return pd.Series(v.tolist(), index=s.index[window - 1:])

def matchSubstrings4(s:str, ss:str, minlen:int=2, reverse:bool=False, whole:bool=True):
'''
按最大匹配长度的顺序,寻找 s 中,与 ss 任意子串相同的子串\n
叠加的部分默认只选首个匹配,例如 638 vs 63/38 -> 只返回 63 ; whole=False 时则全部返回,返回 63 和 38\n
minlen: int 最短匹配长度\n
reverse: bool->True 反向,寻找目标为 ss ,参考为 s\n

如果之前已经载入 pandas ,此函数略微快些,否则 载入 pandas 耗时较多
'''
if reverse: s, ss = ss, s
s1 = ''.join([x for x in ss if x in s])
l = len(s1)
if minlen>l: return []
s2 = pd.Series(list(s))

if whole:
for w in range(l, minlen-1, -1):
ser = rollingByNumpy(s2, w).str.join('')
ii = ser.index.min()
for i,x in ser.items():
if i<=ii+w: continue
if x in ss:
ii = i
yield x
else:
for w in range(l, minlen-1, -1):
ser = rollingByNumpy(s2, w).str.join('')
for x in ser:
if x in ss: yield x
==================
缩进自行处理,遇到冒号结尾的,后面的都向右缩进,基本没有向左回退的,大概能看懂
else 那行和 if whole 对应,没有缩进,其他都是向右缩进,回复没缩进会混乱

1. rollingByNumpy 因为用途很广,我好多地方用到,不仅是字符串,所以独立一个函数分开
pandas.rolling 不能用在整数、浮点以外的类型,所以需要用 numpy 模拟
rollingByNumpy 不是原创,是参考 so 的答案改的
2. 我原来的函数是重组一个 dataframe 返回的(也不需要 ss 参数),因为后续根据需求不同(不一定是求子串),可以整个 dataframe 统一用一个函数(这里才使用到 ss)同时处理,没必要逐个处理;这里只是按 op 需求跑了一遍循环 yield 结果
2023-09-06 12:36:16 +08:00
回复了 yaott2020 创建的主题 问与答 请教关键词搜索数据结构
每个一条记录,跑不掉的,有时间的话还要做分类、权重
我不是用“搜”的,用 AC 自动机
2023-09-06 12:29:07 +08:00
回复了 DigitalG 创建的主题 Android 想换个安卓手机,礼问一些非 root 不折腾下的使用经验
看样子较长时间没接触 android 了
你列的几项都有人答了,说些其他的

1. 激活“开发者选项”,这个以前需要在版本号点 7 下,但最近买几年的机器发现都提供这个开关了
2. 权限搜“读取应用列表”,这个能禁都禁
3. 国产系统一般都有“管家”,这货权限很大,腾讯出品一家独大,好像还不能卸载
4. 有些工具如 shizuku ,免 root 但需要 adb 激活,以前需要用线连接桌面运行,好像从 android9 后,可以无线(wifi)启动,这个在开发者选项里面,更新系统或者重新开机要过一遍
5. 有些系统没有完整提供开发者选项,只能用部分基础的,较高级的功能需要登录,如 MIUI ,需要登入小米帐号
6. 听闻最近限制安装越来越严了,之前还能看完风险警告后“继续安装”,前几天有帖说不能了,我也不知下一台手机怎么办

我用国产手机从来都不注册其帐号,因为我不需要他们提供的那些备份、AI 助手之类的服务,也不想他们上传我的使用数据(上传是跑不了的,只是不想关联起来),当然这也意味着主动放弃了一些便利
2023-09-06 00:16:30 +08:00
回复了 pheyer 创建的主题 分享发现 自举与学外语
你这个结论证伪其实很简单,把“英语”换“印第安语”,试试
也不用这么偏,例如换客家话靠自举的话,对方完全不懂普通话,我都不知道怎么学满 100 个词

人类在有母语的情况下,学习其他语言肯定需要母语辅助
自举那是在该语言一定基础后才能实现的,或者说,想学好自举是必由之路
但不能说教学就要用自举,教学是基础普及的性质,完成这点就够了,而且,并非人人都有自举能力,以及想进一步提高的心思
2023-09-05 23:55:15 +08:00
回复了 ENIAC 创建的主题 程序员 使用 AND 和 OR 运算符实现的加密程序该如何解密?
首先,有个词叫“位运算”,如果不懂这个,那不知道 base64 的实现原理也就正常了
位运算虽然在高级语言使用场合不多,但它是编程的基础之一,也是各种逻辑算式在二进制整数的体现(原理),不懂的话建议补充学习一下
营销是面对人,coding 是面对机器
营销是在 False 的环境发送 True ,coding 是在 True 的环境避开 False
显然是两个思路,人一般无法自如地切换两个思路
2023-09-05 23:18:37 +08:00
回复了 blueboyggh 创建的主题 Python Python 如何提取两个字符串中的相同部分?
这个我写过好几个方案,基本没跳出两个思路
这两个思路都是定位一个尾字符向前或向后组 n 个字符,然后再匹配,跟 #6 所说是一样的
1. itertools.accumulate
2. 是 numpy 模拟 pandas.rolling
载入 pandas/numpy 很耗时,但如果项目本身就需要载入的话,用这个比较大量文字数据,倒是很好用
这个用的是向量函数,没什么优化空间,但数据量很大的话,反而有有优势

还有一个想法是 AC 自动机,主要是有些项目一早就预载了 AC 自动机的字典,匹配目标主要也是在字典范围内,没必要再去各个文字语句都拆解一遍,不过这个没有去做,因为这个暂时没有应用场景,前两个已经很快了
2023-09-05 16:40:35 +08:00
回复了 mitx 创建的主题 问与答 昨晚玩了两局 LOL 之后关闭了客户端,几小时后发现内存满了
wegame 好像关闭只是转后台?
我用过一次试玩一个单机游戏,发觉它还是挂着就没再用了,卸了
2023-09-05 15:44:58 +08:00
回复了 wallriding 创建的主题 汽车 购买汽车的时候是否应该购买噪声屏蔽效果更差的车型?
之前好像有个新闻,某司机拖行了人一段距离,路人呼喊“全然不听”,截停后声称“没有听到”
不开车不知道实际情况怎样,只知道这司机社死了
2023-09-05 15:06:21 +08:00
回复了 vicalloy 创建的主题 Python 你们的 Python 代码加不加 Type Hints
我这种隔夜忘,不单写 type hints ,还写 __doc__
除非函数很简单,一眼就知道类型和它做什么

对我来说,离不开 pyright 了
1 ... 105  106  107  108  109  110  111  112  113  114 ... 175  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   982 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 61ms · UTC 20:03 · PVG 04:03 · LAX 12:03 · JFK 15:03
Developed with CodeLauncher
♥ Do have faith in what you're doing.