teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

edit

2017/12/19 11:51

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -1,3 +1,18 @@
1
+ 質問が変わったので、とりあえず出力に合うようなコードを1つ。
2
+
3
+ ```python
4
+ import itertools
5
+ d = {'A':["アキ","ヒロシ"], 'B':["1","2"]}
6
+ l = ['B', 'A']
7
+ print( '\n'.join( [a+b for b,a in itertools.product(*[d[k] for k in l])] ) )
8
+ ```
9
+
10
+ 以下2点に気をつけてください。
11
+ 辞書は順序がありませんので、コードの見た目の順番に取り出されるとは限りません。
12
+ リストを渡す順番によって、`.product`のループの回り方も変わります。
13
+
14
+ ---
15
+
1
16
  `eval`はできるのなら使わないほうがよいと思われます。
2
17
  以下の実装ならリストを`all_lists`に`.append`していけば目的が果たせそうです。
3
18
 

3

edit

2017/12/19 11:51

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -14,4 +14,15 @@
14
14
  all_lists.append(C)
15
15
  print(list(itertools.product(*all_lists)))
16
16
  # [('アキ', '1', 'A'), ('アキ', '1', 'B'), ('アキ', '2', 'A'), ('アキ', '2', 'B'), ('ヒロシ', '1', 'A'), ('ヒロシ', '1', 'B'), ('ヒロシ', '2', 'A'), ('ヒロシ', '2', 'B')]
17
- ```
17
+ ```
18
+
19
+ ---
20
+
21
+ 追記:
22
+
23
+ リスト・辞書の展開はよく使うテクニックです。
24
+ 覚えておいて損はありません。
25
+ http://nonbiri-tereka.hatenablog.com/entry/2014/08/16/090437
26
+ https://qiita.com/7of9/items/e23bdd6e8d4d7997104a
27
+ https://teratail.com/questions/52472
28
+ http://d.hatena.ne.jp/xef/20121027/p2

2

edit

2017/12/19 11:41

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -8,4 +8,10 @@
8
8
  B = ("1","2")
9
9
  all_lists = [A, B]
10
10
  print(list(itertools.product(*all_lists)))
11
+ # [('アキ', '1'), ('アキ', '2'), ('ヒロシ', '1'), ('ヒロシ', '2')]
12
+
13
+ C = ("A","B")
14
+ all_lists.append(C)
15
+ print(list(itertools.product(*all_lists)))
16
+ # [('アキ', '1', 'A'), ('アキ', '1', 'B'), ('アキ', '2', 'A'), ('アキ', '2', 'B'), ('ヒロシ', '1', 'A'), ('ヒロシ', '1', 'B'), ('ヒロシ', '2', 'A'), ('ヒロシ', '2', 'B')]
11
17
  ```

1

edit

2017/12/19 11:20

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -6,6 +6,6 @@
6
6
 
7
7
  A = ("アキ","ヒロシ")
8
8
  B = ("1","2")
9
- all_lists = (A, B)
9
+ all_lists = [A, B]
10
10
  print(list(itertools.product(*all_lists)))
11
11
  ```