2017-07-07 8 views
2

で複数の変数を初期化し、私は、Python 3に次のコードを持っている:が異なるパラメータ

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

を複数を初期化するためのより良い方法はあります(5+))(異なるK値とし、範囲内に一覧表示されますか?

例:

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)] 
+0

生成ループのリストとループの前に宣言されている別のリストに追加 – PYA

答えて

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)] 
+0

ありがとう! – yangd01234

4

確か:引数をparameterise:

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)) ] 
関連する問題