a=[[1,2],[3,4],[5,6]]という配列を、中の配列の順番はバラバラで、しかしxとyは対応する形で(例えばx=[5,1,3] y=[6,2,4])というようにxとyをそれぞれ取り出したいです。
初歩的な質問で申し訳ありません。言語はpythonです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/21 07:08
回答3件
0
こんにちは
random.sample と、zip を使うと、以下のように一行で書けます。
python3
1x, y = zip(*sample(a, len(a)))
ただし、上記で得られる x, y ともにタプルなので、リストが欲しいのであればこの後、
python3
1x, y = list(x), list(y)
とするなりして、リストに変換します。
-** 動作確認用Repl.it:** https://repl.it/@jun68ykt/Q271703
投稿2020/06/21 12:50
総合スコア9058
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Python3での回答を希望されているようでしたのでPythonで書き直しました。慣れていない言語のため書き方が不自然な部分もあるかと思いますがご容赦くださいませ。
import random a = [[1, 2], [3, 4], [5, 6]] x = [] y = [] isUsed = [] for i in range(len(a)): isUsed.append(False) print(isUsed) while True: if (len(x) == len(a)): break index = random.randrange(len(a)) while isUsed[index]: # print(index) # print(isUsed[index]) index = random.randrange(len(a)) isUsed[index] = True x.append(a[index][0]) y.append(a[index][1]) print(x) print(y)
どの言語で回答すれば良いかわからなかったのでJavaで書いてみました。
こういうことでしょうか?
Main.java
1public static void main(String[] args) { 2 int[][] a = { { 1, 2 }, { 3, 4 }, { 5, 6 } }; 3 Random rand = new Random(); 4 List<Integer> x = new ArrayList<>(); 5 List<Integer> y = new ArrayList<>(); 6 boolean[] isUsed = new boolean[a.length]; 7 8 while (true) { 9 // 終了条件 10 if (x.size() == a.length) 11 break; 12 13 // 既に出たindexは使わないので新しいものが出るまでrandomにindexを選ぶ 14 int index = rand.nextInt(a.length); 15 while (isUsed[index]) { 16 index = rand.nextInt(a.length); 17 } 18 isUsed[index] = true; 19 x.add(a[index][0]); 20 y.add(a[index][1]); 21 } 22 23 // 結果の出力 24 System.out.print("x:"); 25 for (int v : x) { 26 System.out.print(v + " "); 27 } 28 System.out.println(); 29 System.out.print("y:"); 30 for (int v : y) { 31 System.out.print(v + " "); 32 } 33 }
投稿2020/06/21 05:59
編集2020/06/21 06:57総合スコア38
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。