実現したいこと
for文の中でランダムに個数を指定し,指定した個数分だけ変数をprintできるようにしたいです.
例えば,簡単に以下の例ですと
python
1for i in ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr', 'stu', 'vwx', 'yz']: 2 upper = i.upper() 3 print(upper)
出力結果は次のようになると思います.
ABC DEF GHI JKL MNO PQR STU VWX YZ
しかし,これを例えば,出力したい個数を5と指定すると, 次のように10回の繰り返しの中で5つの数を順に,かつランダムに抽出したいのです.
DEF JKL MNO VWX YZ
ここで,私の都合上,必ずプログラムの一行目と2行目の部分は固定したままでお願いします.そして,forの中でこれを実現できるようにしたいです.
つまり,9回の繰り返しの中で4回は出力せず,5回だけ重複なしでランダムに,大文字のアルファベットを抽出したいです.
これらを実現でき,簡単に記述できる方法はございますでしょうか.
補足情報(FW/ツールのバージョンなど)
Windows10
conda 4.12.0
Python 3.9.12
「おそらく,0~1のランダムの数が0.5以上なら~…などと条件分岐すればランダムに抽出することは可能であると思いますが,必ずしも指定した数だけ出力が返ってくるとは限りません」というこの意味がわかりません。
例を見ると、ランダムではなく、増加する数列になっているようです。
どのような「ランダムな数の並び」が得たいのでしょう?
質問内容を変更いたしました.
今一度,目を通していただけますとありがたいです.
宜しくお願いいたします。
まったく違う質問になってしまっています。
回答は消せないので、後から見た人は変な回答が付いているように見えてしまうので、ここは解決済みにして、新たな質問にしたほうがよかったですね。
提示のfor分を利用することが前提だとすると、普通のやりかたでは表示する順番は変えられないので、YZ の後に STU を出力するようなことはできません。
もしそのようなことをしたいのであれば、もとのfor分の縛りは無くすべきです。
確かにおっしゃるとおりです.次回から気を付けたいと思います.
再び質問内容を修正させていただきました.
アルファベットを順番にかつランダムに,指定した個数だけ取得するという前提でお願します.
これ、ループの中に実装して、しかも各文字列の出現頻度を揃えたいということだととても難しいと思うんだけどどうだろう。
単に毎回ランダムに引いていくと、足りなくなったりするし、
なるほど.
でしたら,このような問題に都合の良いメソッドなども存在しないのでしょうか…
すでに回答に出てますが、random.sample() です。
回答では数値だったので、数値のリストを渡していますが、文字列のリストを渡せば目的のものが得られるでしょう。
random.sample()を使用すると,目的どおりに実装することができました.
ご助言ありがとうございました.
回答3件
あなたの回答
tips
プレビュー