获取长度为K的N个随机不重叠的子字符串

假设我们有一个长度为20000(或另一个任意长度)的字符串R。我想从字符串R中获得8个长度为k的随机不重叠子字符串。

我试图将字符串R划分为8个相等长度的分区,并获得每个分区的[:k],但这不够随机,无法在我的应用程序中使用,并且无法轻松满足该方法的工作条件。

我想知道我是否可以使用内置的随机软件包来完成这项工作,但我想不出一种方法,该怎么办?

qianqianyouer 回答:获取长度为K的N个随机不重叠的子字符串

您可以简单地运行一个循环,然后在循环内部使用random包选择一个起始索引,并从该索引处提取子字符串。跟踪已使用的起始索引,以便可以检查每个子字符串是否不重叠。只要k不太大,它应该可以快速,轻松地工作。

我之所以提到k的大小,是因为如果它足够大,则可以选择不允许您找到8个非重叠子字符串的子字符串。但这仅在k相对于原始字符串的长度而言很大时才需要考虑。

,

您可以使用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)]
,

好吧,不需要做循环。如果我们想将字符串s分成每个长度为m的{​​{1}}个子字符串,则此问题等效于样本k子字符串之间的间隔,其总长度等于len(s )-m * k。

具有很好的离散分布,其属性是采样值总计为固定数量-Multinomial Distribution。这样,按时间间隔分割字符串就变得微不足道了,可以对其进行优化

代码,Python 3.7.5 Anaconda x64,Win10。

m+1
本文链接:https://www.f2er.com/3131004.html

大家都在问