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

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

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

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

Q&A

3回答

405閲覧

python ネストなど

hiro0927

総合スコア3

Python

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

0グッド

0クリップ

投稿2022/01/11 06:16

編集2022/01/11 06:35

4つの変数に10秒間隔で情報が更新されて代入されます。
この4つの変数の大小の関係、24通りの組み合わせ
(変数i,j,k,lがあるとした時、i>j>k>l、i>j>l>k、
i>k>j>l、i>k>l>j 、i>l>j>k 、i>l>k>j……といったもので24通り)でそれぞれとある関数を使って出力しようとしています。関数にはこの変数を代入しません、、
この時if文を使ってひたすらネストするかandを使って「かつ」という形にするしかないのでしょうか?

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

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

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

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

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

y_waiwai

2022/01/11 06:19

なにをやりたいのかさっぱりわかりません。 とりあえずあなたのやりたいことができるコードを組んで提示しましょう
BeatStar

2022/01/11 06:26

場合によるのでは? 『この4つの変数の大小の関係』と『24通りの組み合わせ』は関係があるのでしょうか? どういう関係でしょうか?たとえば『それぞれ取る・取らないの2通りだから2^4で…』とかなのか、 条件p: 四つの大小関係 条件q: 24通りの組み合わせ の意味なのか。 場合によるのでわかりません。それに『とある関数』はどのように使われるのでしょうか?
takasima20

2022/01/11 06:27

とりあえずどれくらいのパターンがあるか列挙しましょう。 それを見て適当な方法を考えます。
takasima20

2022/01/11 07:17

よっつの変数の並び順で条件が決まって、24この関数を用意するの? それとも関数は一つで、引数を変えるかんじ?
hiro0927

2022/01/11 07:22 編集

takasimaさん 並び順というより変数に代入されている値の大きさの大小での並び順で条件が決まります。 関数は1つだけで引数は変わりますが、変数に影響されないです
BeatStar

2022/01/11 08:22

そもそもその関数の目的はなんでしょうか? 意図がはっきりとわかりません…
kazuma-s

2022/01/11 14:43

「if文を使ってひたすらネストするかandを使って「かつ」という形にする」ことはできるんですよね。 変数が 3つだと、6通りですから、そのコードを質問に追記してください。 そうすれば何をやりたいのかわかるので、回答できると思います。
guest

回答3

0

"4つ"かつ**"同じ値はない"**と決まっているなら、技巧的な書き方を考えるより24通り羅列する方がいい気がします。

python

1if i > j > k > l: 2 some_func(...) 3elif i > j > l > k: 4 some_func(...) 5elif i > k > j > l: 6 some_func(...) 7elif ...: 8 ...

あとは「引数をどういう風に決めるのか」の工夫ではないかと。こちらは具体的な中身がないと回答は集まらないでしょう。

投稿2022/01/11 08:48

quickquip

総合スコア11072

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

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

0

たとえば…

python

1p = {'abcd':10, 'abdc':20, (以下略)} 2ar = [('a',i),('b',j),('c',k),('d',l)] 3ar.sort(key = lambda x: x[1]) 4k = ar[0][0] + ar[1][0] + ar[2][0] + ar[3][0] 5 6print(p[k])

投稿2022/01/11 08:15

takasima20

総合スコア7460

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

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

0

あまりよくないけど、全パターン列記するよりはましな方法として。

i,j,k,lに 1,2,3,4と番号を付けて、小さい順のタプルと呼び出す関数の辞書を用意する。

python

1def f1(): 2 print('func 1') 3 4def f2(): 5 print('func 2') 6 7funcs = {(1, 2, 3): f1, # i<j<k 8 (2, 1, 3): f2} # j<i<k 9

※ 4つは面倒なので3つにして、2パターンだけ書いた。

あとは、i,j,k,l の大小から、対応するタプル導いて、funcsから引くだけ。

一例だがこんな感じ。適当に作ったからもっといい書き方があるはず。

python

1 2i = 5 3j = 3 4l = 10 5 6dat = {1: i, 2: j, 3: l} 7dat_sorted = sorted(dat.items(), key=lambda x:x[1]) 8dat_order = tuple([x[0] for x in dat_sorted]) 9 10print(dat_order) # -> (2, 1, 3)

投稿2022/01/11 07:13

TakaiY

総合スコア12830

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問