2017-06-28 5 views
0

私は同じローを複数回以下のように取得する必要があります。Python:同じ行を何度も取得する方法

A=[2,3,4,5] 
B=[[2,3,4,5],[2,3,4,5],[2,3,4,5],[2,3,4,5],...,[2,3,4,5]] 

行数は変更可能です。 この問題を解決するにはどうすればよいですか? Aがリストである

+0

何か試しましたか?何が起こった? – jonrsharpe

+0

私は自分自身に答えを見つけました。 – kgdc

+0

これはB = [A] * n – kgdc

答えて

-2
A = [1,2,3] 
B= [] 
n= 5 
for i in range(5): 
    B.append(A) 

、Bは、結果リストで、n行

1

これを試してみての数です:

B = [[i for i in A] for n in range(5)] 

変更部数を変更するにはrange()コールの値。これは、他の回答のような参照共有に悩まされません。スライス演算子は深いコピーを作成しますので、これはまた、同様に*参照の共有に悩まされない

B = [A[:] for n in range(5)] 

online example

か短い同等。少なくとも、この入力だけで、同じ旧リストに複数の参照を行います最も簡単な方法でリストの内包をやって、指摘されたように

+0

このメソッドを試してみたところ、2つのループがあり、コードが遅くなることはありませんでしたか?と "[A] * n"は、このメソッドも実行時の複雑さと同じですか? – kgdc

+1

@kgdc '[A] * n'は同じリストの' n '個のコピーを生成します。それぞれのコピーは実際にはリファレンスであり、独立していません。このコードは、上記の答えと比較することの趣旨とは何ですか? – Baldrickk

0

の面で

online example

*

。代わりに、我々はリストの新しいコピーを取得確保するために、我々は行うことができます:list(A)たちは代わりに同じリストを参照するのAのコピーを取得することが保証さ

A = [2, 3, 4, 5] 
B = [list(A) for i in range(10)] 

+0

ディープコピーを作成します(すべての要素をコピーします)。 "B = [範囲内のn(10)]の[iのiのi]" – kgdc

+0

まあ、一つのことのための構文。私はリストの理解のほんの1つの層でそれを保つために少し読みやすく見えると思う。それから、私は、リスト全体を一度にコピーすることができるように、私の提案はちょっと早くなければならないと推測します。金属に近いメモリ割り当てなど)。 – JohanL

0

また、行うことができます。その要素が複雑なオブジェクトである場合に

B=([A.copy()]*10) 

しかし、それはBでリスト間の参照を生成することができます。しかし、int、文字列、その他の基本的なものに使用している場合、うまくいくでしょう。

関連する問題