Python:有没有一种更具伸缩性的方法来查找字符串中的所有字符串?

2024-09-29 21:51:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我手头有一个相当简单的任务:给定一个(小写)big字符串和一个(小写)small字符串数组,如果所有small字符串都在big字符串中,我需要生成1,否则生成0。所以Python式的方法就是:

>>> big = 'the quick brown fox jumps over the lazy dog'
>>> smallTrue = ["quick","dog","fox"]
>>> smallFalse = ["quick","fox","wolf"]
>>> int(all([s in big for s in smallTrue]))
1
>>> int(all([s in big for s in smallFalse]))
0

问题是,是否有一种不同的方法来获取0和1,以便更好地扩展到更长的big个数(想想一篇“典型”科学论文的摘要)和更长的一大组small数组?你知道吗

缩放意味着处理时间,因为我的机器有很多内存。所以如果我需要以某种方式对数据进行预处理,那就需要更多的RAM了。你知道吗

之所以问这个问题,是因为我在执行类似的字符串操作任务时遇到了一些可伸缩性问题。你知道吗


Tags: the方法字符串in数组allquickint
2条回答

在字符串中查找字符串总是很慢的。如果拆分为大的,然后在生成器上运行all(),则应该可以提高性能

big_set = set(big.split(' ')) # you get O(1) lookup on a set
return all(s in big for s in smallTrue)

只要去掉方括号,就可以得到一个生成器而不是list理解。它将被懒散地评估,而不是急切地评估,以避免记忆问题。你知道吗

all(s in big for s in smallTrue)

另外,您可能不需要int()调用,因为boolint的一个子类,TrueFalse分别表示10。你甚至可以和他们一起做数学。你知道吗

相关问题 更多 >

    热门问题