我手头有一个相当简单的任务:给定一个(小写的)big 字符串和一个(小写的)small 字符串数组,我需要生成 1 if all small 字符串在 big 字符串中,否则为 0。所以这样做的 pythonic 方式就是:
>>> 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(想想“典型”科学的抽象paper) 加上一大组更长的 small 数组?
缩放意味着处理时间,因为我的机器有很多 RAM。因此,如果我需要以某种需要更多 RAM 的方式预处理数据,那很好。
之所以提问,是因为我在执行类似的字符串操作任务时遇到了一些可伸缩性问题。
请您参考如下方法:
只需删除方括号,您将拥有一个生成器而不是一个list 推导式。它将延迟而不是急切地评估,避免内存问题。
all(s in big for s in smallTrue)
此外,您可能不需要 int() 调用,因为 bool 是 int 的子类, True 和False 分别代表1 和0。您甚至可以用它们做数学运算。
