Python 如何在一行中分配参数相同的两个变量

Python 如何在一行中分配参数相同的两个变量,python,python-3.x,variables,Python,Python 3.x,Variables,作为一个学习练习,我想知道python 3.x中是否有一种基本的方法: a = random.sample(range(30), random.randrange(1,20)) b = random.sample(range(30), random.randrange(1,20)) 作为: 我知道这是行不通的。我也不知道如果不写的话是否有可能做到这一点 a, b = random.sample(range(30), random.randrange(1,20)), random.sample(

作为一个学习练习,我想知道python 3.x中是否有一种基本的方法:

a = random.sample(range(30), random.randrange(1,20))
b = random.sample(range(30), random.randrange(1,20))
作为:

我知道这是行不通的。我也不知道如果不写的话是否有可能做到这一点

a, b = random.sample(range(30), random.randrange(1,20)), random.sample(range(30), random.randrange(1,20))

感谢您提前回复。

我认为最好的选择可能是列表理解:

a, b = [random.sample(range(30), random.randrange(20)) for _ in range(2)]
此外,还可以使用生成器表达式:

a, b = (random.sample(range(30), random.randrange(20)) for _ in range(2))

但是,由于这是解包,我不确定这是否会更快。

我认为最好的选择可能是列表理解:

a, b = [random.sample(range(30), random.randrange(20)) for _ in range(2)]
此外,还可以使用生成器表达式:

a, b = (random.sample(range(30), random.randrange(20)) for _ in range(2))
但是,由于这是解包,我不确定这是否会更快

a,b=[random.sample(range(30), random.randrange(20)) for _ in [0,1]]
[0,1]可以替换为任意长度的两个iterable

如果您经常调用random.samplerange30、random.randrange20,则应为其命名:

 def random_length_sample():
       return random.sample(range(30), random.randrange(20))
 a = random_length_sample()
 b = random_length_sample()
一种方法是

a,b=[random.sample(range(30), random.randrange(20)) for _ in [0,1]]
[0,1]可以替换为任意长度的两个iterable

如果您经常调用random.samplerange30、random.randrange20,则应为其命名:

 def random_length_sample():
       return random.sample(range(30), random.randrange(20))
 a = random_length_sample()
 b = random_length_sample()
为什么不干脆:

a=随机。采样范围30,随机。随机范围20 b=a 为什么不干脆:

a=随机。采样范围30,随机。随机范围20 b=a

为了清楚起见,它可能会更好。或者将它添加到一个大的“你不应该做的事情”下@Aran Fey,我知道,我只是想展示给大家看,其他不幸的方法是行不通的。但是,因为它似乎会带来混乱,我只是删除了它们。@Thierrylahuille好的,我将删除它们以避免误解。这两个选项中的任何一个对我来说都是最好的,而我所更改的内容仍然是可读的,我应该在我的原始代码中更改它们,至于random.randrange20是随机的。randrange1,20这样它就不会生成一个空列表。为了清楚起见,它可能会更好。或者将它添加到一个大的“你不应该做的事情”下@Aran Fey,我知道,我只是想向OP展示其他不幸不起作用的方式。但是,因为它似乎会带来混乱,我只是删除了它们。@Thierrylahuille好的,我将删除它们以避免误解。这两个选项中的任何一个对我来说都是最好的,而我所更改的内容仍然是可读的,我应该在我的原始代码中更改它们,至于random.randrange20是random.randrange1,20,这样它就不会生成空列表。a,b=lambda s:s30,20,s30,20lambda,b:random.samplerangea,random.randrangeb-非常感谢。真是太棒了!如果你同意a和b的大小相同,你可以用numpy做一行:a,b=np.random.choicerange30,2,random。choicerange20@BrettPlemons这主要是一个模糊的笑话,但我很高兴你喜欢它。谢谢@pault提供模块答案。我总是很兴奋能学到更多使用numpy的方法,对于我的特殊问题,我需要两个不同大小的列表。但在大多数情况下,这是一个好主意!a、 b=λs:s30,20,s30,20λa,b:random.samplerangea,random.randrangeb-非常感谢。真是太棒了!如果你同意a和b的大小相同,你可以用numpy做一行:a,b=np.random.choicerange30,2,random。choicerange20@BrettPlemons这主要是一个模糊的笑话,但我很高兴你喜欢它。谢谢@pault提供模块答案。我总是很兴奋能学到更多使用numpy的方法,对于我的特殊问题,我需要两个不同大小的列表。但在大多数情况下,这是一个好主意!a和b与您的代码相同。OP不希望这样。这将做两件事,a和b的输出将是相同的,这意味着这两个列表将是相同的。此外,当调用每个变量时,计算机将转到内存中的同一位置。也就是说,如果我像if语句中的a是b那样写,我会得到真的好吧,我没有把它看作随机变量,那么a和b在代码中都是一样的。OP不希望这样。这将做两件事,a和b的输出将是相同的,这意味着这两个列表将是相同的。此外,当调用每个变量时,计算机将转到内存中的同一位置。也就是说,如果我像if语句中的a是b那样写,我会得到真的好吧,我不认为这是随机的