假设我们有一个长度为20000(或另一个任意长度)的字符串R。我想从字符串R中获得8个长度为k的随机不重叠子字符串。
我试图将字符串R划分为8个相等长度的分区,并获得每个分区的[:k],但这不够随机,无法在我的应用程序中使用,并且无法轻松满足该方法的工作条件。
我想知道我是否可以使用内置的随机软件包来完成这项工作,但我想不出一种方法,该怎么办?
答案 0 :(得分:0)
您可以简单地运行一个循环,然后在循环内部使用random
包选择一个起始索引,并从该索引处提取子字符串。跟踪已使用的起始索引,以便可以检查每个子字符串是否不重叠。只要k
不太大,它应该可以快速,轻松地工作。
我之所以提到k
的大小,是因为如果它足够大,则可以选择不允许您找到8个非重叠子字符串的子字符串。但这仅在k
相对于原始字符串的长度而言很大时才需要考虑。
答案 1 :(得分:0)
您可以使用while
循环来强制唯一性:
import random
result, n, k = set(), 20000, 10
for _ in range(8):
a = random.randint(0, n-k)
while any(a >= i and a <= i+k for i in result):
a = random.randint(0, n-k)
result.add(a)
final_result = [(i, i+k) for i in result]
输出:
[(13216, 13226), (10400, 10410), (4290, 4300), (14499, 14509), (7985, 7995), (9363, 9373), (1181, 1191), (14526, 14536)]
答案 2 :(得分:0)
好吧,不需要做循环。如果我们想将字符串s
分成每个长度为m
的{{1}}个子字符串,则此问题等效于样本k
子字符串之间的间隔,其总长度等于len(s )-m * k。
具有很好的离散分布,其属性是采样值总计为固定数量-Multinomial Distribution。这样,按时间间隔分割字符串就变得微不足道了,可以对其进行优化
代码,Python 3.7.5 Anaconda x64,Win10。
m+1