【发布时间】:2017-09-07 04:27:59
【问题描述】:
我想把下面的两个函数合并成一个更短的函数。
random_strs 生成n 唯一字符串列表,每个长度为length,从指定的letters 容器中提取。 nonunique_random_strs 只是一个内部调用的助手。逻辑是根据n检查唯一元素的数量,然后添加元素并重复此过程,直到两者相等。
import numpy as np
def nonunique_random_strs(length, n, letters):
strs = np.random.choice(letters, size=(n, length)).tolist()
strs = [''.join(inner) for inner in strs]
return strs
def random_strs(length, n, letters):
strs = list(set(nonunique_random_strs(length, n, letters)))
to_add = n - len(strs)
while to_add > 0:
added = nonunique_random_strs(length=length, n=to_add, letters=letters)
strs.extend(added)
strs = list(set(strs))
to_add = n - len(strs)
return strs
print(random_strs(length=2, n=5, letters=list('abcde')))
# ['cb', 'ce', 'dc', 'db', 'ba']
所以它很实用,但我想在其内部引用 random_strs 并且在构建它时遇到了麻烦。
【问题讨论】:
-
也许嵌套函数?
-
你的目标是“学习递归”吗?因为如果不是,我认为您可以通过将上面的内容替换为
print(random.sample(list(itertools.combinations('abcde', 2)), 5))来获得相同的结果。 -
@BradSolomon 字符串列表
random.sample([a + b for a,b in itertools.combinations('abcde', 2)], 5)
标签: python python-3.x recursion