【发布时间】:2018-11-25 19:59:45
【问题描述】:
我有两个字符串列表,如下所示:
test1 = ["abc", "abcdef", "abcedfhi"]
test2 = ["The", "silver", "proposes", "the", "blushing", "number", "burst", "explores", "the", "fast", "iron", "impossible"]
第二个列表较长,所以我想通过随机采样将其下采样到第一个列表的长度。
def downsample(data):
min_len = min(len(x) for x in data)
return [random.sample(x, min_len) for x in data]
downsample([list1, list2])
但是,我想添加一个限制,即从第二个列表中选择的单词必须与第一个列表的长度分布相匹配。所以对于随机选择的第一个词,它必须与较短列表的第一个词具有相同的长度。这里的问题是也不允许替换。
如何从test2 中随机选择与test1 的字符长度分布相匹配的n 个(较短列表的长度)元素?
谢谢,
杰克
【问题讨论】:
-
我会将您的第二个列表变成一个字典,其中键是字符串长度,这样您就可以根据第一个列表中字符串的长度从该列表中随机抽样,这是一个 O( 1) 查找
-
@user3483203 很抱歉,我不确定我是否关注。如果您能将其写为答案,我将不胜感激,如果可行,我一定会接受。
-
你能澄清你不想更换的意思吗?结果中的初始列表中是否没有任何个单词,或者它是基于索引的索引?
-
@user3483203 不想替换,我的意思是,如果
test1 = ["abc", "abcdef","abcdef", "abcedfhi"],那么在下采样的第二个列表中,例如,银不能重复两次,因为它只在test2中出现一次. -
感谢您的澄清,我会更新我的答案
标签: python