gpt4 book ai didi

python - 从列表中随机选择值但有字符长度限制

转载 作者:太空狗 更新时间:2023-10-29 20:57:37 26 4
gpt4 key购买 nike

我有两个字符串列表,如下所示:

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(较短列表的长度)个元素?谢谢, jack

最佳答案

设置

from collections import defaultdict
import random
dct = defaultdict(list)
l1 = ["abc", "abcdef", "abcedfhi"]
l2 = ["The", "silver", "proposes", "the", "blushing", "number", "burst", "explores", "the", "fast", "iron", "impossible"]

首先,使用 collections.defaultdict 创建一个以单词长度为键的字典:

for word in l2:
dct[len(word)].append(word)

# Result
defaultdict(<class 'list'>, {3: ['The', 'the', 'the'], 6: ['silver', 'number'], 8: ['proposes', 'blushing', 'explores'], 5: ['burst'], 4: ['fast', 'iron'], 10: ['impossible']})

然后您可以使用简单的列表推导式和 random.choice 来选择一个与第一个列表中每个元素的长度相匹配的随机词。如果在您的词典中没有找到一个单词长度,请填写-1:

final = [random.choice(dct.get(len(w), [-1])) for w in l1]

# Output
['The', 'silver', 'blushing']

根据明确的要求进行编辑
如果列表 2 中不存在重复项,这是一种满足不允许重复项要求的方法:

for word in l2:
dct[len(word)].append(word)

for k in dct:
random.shuffle(dct[k])

final = [dct[len(w)].pop() for w in l1]
# ['The', 'silver', 'proposes']

如果第二个列表中没有足够的单词来完成分配,此方法将引发 IndexError

关于python - 从列表中随机选择值但有字符长度限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50884623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com