質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

2499閲覧

Python for文の中でランダムに変数を抽出

harug

総合スコア28

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/05/26 10:40

編集2022/05/27 06:53

実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2022/05/26 12:12

「おそらく,0~1のランダムの数が0.5以上なら~…などと条件分岐すればランダムに抽出することは可能であると思いますが,必ずしも指定した数だけ出力が返ってくるとは限りません」というこの意味がわかりません。 例を見ると、ランダムではなく、増加する数列になっているようです。 どのような「ランダムな数の並び」が得たいのでしょう?
harug

2022/05/27 06:30

質問内容を変更いたしました. 今一度,目を通していただけますとありがたいです. 宜しくお願いいたします。
TakaiY

2022/05/27 06:39 編集

まったく違う質問になってしまっています。 回答は消せないので、後から見た人は変な回答が付いているように見えてしまうので、ここは解決済みにして、新たな質問にしたほうがよかったですね。
TakaiY

2022/05/27 06:39

提示のfor分を利用することが前提だとすると、普通のやりかたでは表示する順番は変えられないので、YZ の後に STU を出力するようなことはできません。 もしそのようなことをしたいのであれば、もとのfor分の縛りは無くすべきです。
harug

2022/05/27 06:48

確かにおっしゃるとおりです.次回から気を付けたいと思います. 再び質問内容を修正させていただきました. アルファベットを順番にかつランダムに,指定した個数だけ取得するという前提でお願します.
TakaiY

2022/05/27 07:08

これ、ループの中に実装して、しかも各文字列の出現頻度を揃えたいということだととても難しいと思うんだけどどうだろう。 単に毎回ランダムに引いていくと、足りなくなったりするし、
harug

2022/05/27 07:16

なるほど. でしたら,このような問題に都合の良いメソッドなども存在しないのでしょうか…
TakaiY

2022/05/27 08:31

すでに回答に出てますが、random.sample() です。 回答では数値だったので、数値のリストを渡していますが、文字列のリストを渡せば目的のものが得られるでしょう。
harug

2022/05/27 16:24

random.sample()を使用すると,目的どおりに実装することができました. ご助言ありがとうございました.
guest

回答3

0

ベストアンサー

python

1import random 2 3mark = [True] * 5 + [False] * 4 4random.shuffle(mark) 5for i in ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr', 'stu', 'vwx', 'yz']: 6 upper = i.upper() 7 if mark.pop(): print(upper)

enumerate を使う方法

python

1import random 2 3lst = ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr', 'stu', 'vwx', 'yz'] 4N = 5 5choices = [v[1].upper() for v in sorted(random.sample([*enumerate(lst)], N), key=lambda x: x[0])] 6print(choices)

投稿2022/05/26 10:57

編集2022/05/27 09:40
melian

総合スコア19798

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

harug

2022/05/27 06:32

解答大変ありがたいのですが,質問内容に不備がございました. お手すきの際に,もう一度目を通していただけますとありがたいです. よろしくお願いいたします.
harug

2022/05/27 16:23

大変ありがとうございます. どちらの方法も,自分では気づかなかった方法でしたのでとても勉強になりました.
guest

0

random.randint()を使えば簡単に書けます。

Python

1from random import randint #randomモジュールから関数randint()をインポート 2 3for i in range(5): #回数 4 print(randint(1, 10)) #1以上10以下のランダムな整数

投稿2022/05/26 10:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ランダムな数値を出力する、というコードを書きましょう。

そして、それを5回繰り返せばいいです

投稿2022/05/26 10:49

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/05/26 11:50

点数乞食は止めましょう。回答になってないことを回答欄に書くのは止めましょう。
TakaiY

2022/05/27 06:04

充分回答になっていると思いますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問