使用不同的参数初始化多个变量

时间:2017-07-07 19:08:12

标签: python list python-3.x

我在python 3中有以下代码:

x = [(''.join(random.choices(string.ascii_lowercase, k=7))) for _ in range(5)]

有没有更好的方法来初始化具有不同K值和范围()的多个(5+)列表?

例如:

y = [(''.join(random.choices(string.ascii_lowercase, k=3))) for _ in range(5)]
z = [(''.join(random.choices(string.ascii_lowercase, k=7))) for _ in range(2)]
a = [(''.join(random.choices(string.ascii_lowercase, k=4))) for _ in range(3)]
b = [(''.join(random.choices(string.ascii_lowercase, k=3))) for _ in range(5)]
c = [(''.join(random.choices(string.ascii_lowercase, k=1))) for _ in range(3)]

2 个答案:

答案 0 :(得分:5)

将列表理解放在函数中并重复使用:

def func(k, r):
   return [(''.join(random.choices(string.ascii_lowercase, k=k))) for _ in range(r)]
y = func(3, 5)
...
c = func(1, 3)

如果您在两个列表中包含kr的值,则可以执行以下操作:

y,..., c =  (func(*t) for t in zip(lst_k, lst_r))

或者更好的是将数据结构保留为列表列表,不用担心LHS上的目标数量:

super_list = [func(*t) for t in zip(lst_k, lst_r)]

答案 1 :(得分:4)

当然:参数化参数:

import random
import string

k_val = [3, 7, 4, 3, 1]
r_val = [5, 2, 3, 5, 3]

x = [[(''.join(random.choice(string.ascii_lowercase, k=k_val[i])))
           for _ in range(r_val[i])] for i in range (len(r_val)) ]