有没有一种创建函数的方法,该函数创建带有参数的元组列表:
我相信我拥有大部分:
import random
def list_rand_num_tuples(num_of_tups, range_beg, range_end):
list_tuples = [
(random.randrange(range_beg, range_end),
random.randrange(range_beg, range_end),
random.randrange(range_beg, range_end))
for i in range(num_of_tups)]
return list_tuples
# test/display it
print(list_rand_num_tuples(3, 0, 51))
但是这部分如何变得更加动态?
(random.randrange(range_beg, range_end),
random.randrange(range_beg, range_end),
random.randrange(range_beg, range_end))
例如,是否可以提供length of tuple
/ elements of tuple
参数以使该部分循环适当的次数?
答案 0 :(得分:3)
您的意思是为每个元组的元素添加一个额外的参数吗?您可以添加另一个范围
def list_rand_num_of_tuples(num_tups, num_elements, range_beg, range_end):
return [tuple(random.randrange(range_beg, range_end)
for _ in range(num_elements))
for _ in range(num_tups)]
答案 1 :(得分:2)
可能的实现方式可以使用itertools
模块中的starmap
函数:
import random
import itertools
def list_rand_num_tuples(num_of_tups, range_beg, range_end):
"""
Generate `num_of_tups` tuples, each containing `num_of_tups` random
numbers selected from the interval `range_beg..range_end`.
"""
interval = (range_beg, range_end)
return [
tuple(itertools.starmap(random.randrange, [interval] * num_of_tups))
for _ in range(num_of_tups)
]
通过此实现,
>>> list_rand_num_tuples(3, 0, 10)
输出
[(2, 7, 5), (4, 1, 0), (1, 7, 0)]
我个人觉得这比嵌套列表理解更具可读性,并且它利用了专门为此目的设计的标准库功能。
答案 2 :(得分:0)
将elem_per_tuple
变量添加到函数中。为便于阅读,使用lambda
来使嵌套列表理解list_tuples
看起来像打结的面条。
import random
def list_rand_num_tuples(num_of_tups, elem_per_tuple, range_beg, range_end):
rand = lambda: random.randrange(range_beg, range_end)
return [tuple(rand() for _ in range(elem_per_tuple)) for _ in range(num_of_tups)]
print(list_rand_num_tuples(3, 3, 0, 51))
输出:
[(22, 47, 11), (37, 26, 40), (29, 22, 7)]