内側のforが回る回数は定数なので、計算量的にはO(N)になり、そのロジックで大きな問題はありません。
二重内包表記だときもち程度短くて綺麗です。
python
1test = [[i, i] for i in range(3)]
2ans = [x for x in test for _ in range(3)]
結果の変更を考慮するなら
そのままだと各[0, 0]
同士、[1, 1]
同士、[2, 2]
同士がすべて同じlist
オブジェクトになりますから、ans
の要素を更に書き換えたい場合は不都合があります。
これを解消するには子リストをコピーしてあげます。
python
1>>> test = [[i, i] for i in range(3)]
2>>> ans = [x for x in test for _ in range(3)]
3>>> ans
4[[0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [2, 2], [2, 2], [2, 2]]
5>>> ans[0][0] = 1
6>>> ans
7[[1, 0], [1, 0], [1, 0], [1, 1], [1, 1], [1, 1], [2, 2], [2, 2], [2, 2]]
8>>> test = [[i, i] for i in range(3)]
9>>> ans = [x.copy() for x in test for _ in range(3)]
10>>> ans
11[[0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [2, 2], [2, 2], [2, 2]]
12>>> ans[0][0] = 1
13>>> ans
14[[1, 0], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [2, 2], [2, 2], [2, 2]]
参考:
なぜ list 'y' を変更すると list 'x' も変更されるのですか? プログラミング FAQ — Python 3.8.1 ドキュメント
多次元のリストを作るにはどうしますか? プログラミング FAQ — Python 3.8.1 ドキュメント
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/27 04:59
2019/12/27 05:07
2019/12/27 06:18 編集