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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python 3.x

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

Q&A

解決済

3回答

1015閲覧

複数のlistからfor文で最大値を取得して空のlistに入れたい

yonhark0

総合スコア11

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python 3.x

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

0グッド

0クリップ

投稿2020/02/06 04:37

python初心者です。
複数のlistからfor文を使って同じインデックスの最大値を空のlistに入れたいのですが、エラーが出てしまいます。

IndexError: invalid index to scalar variable.

list1 = [7, 4, 3]
list2 = [2, 1, 8]
list3 = [9, 3, 1]

list0 = []

各listの同じインデックスの要素の最大値をとってlist1が最大ならlist0に1をいれ、
同様にlist2がならlist0に2、list3が最大ならlist0に3という風にしたいです。

求めている結果は下のlist0の様なものです。
list0 = [3, 1, 2]

python

1for i in range(0,3): 2 for j in range(0,3): 3 if list1[i][j] > list2[i][j] and list1[i][j] > list3[i][j]: 4 list0[i][j] = 1 5 else: 6 pass 7for i in range(0,3): 8 for j in range(0,3): 9 if list2[i][j] > list1[i][j] and list2[i][j] > list3[i][j]: 10 list0[i][j] = 2 11 else: 12 pass 13for i in range(0,3): 14 for j in range(0,3): 15 if list3[i][j] > list1[i][j] and list3[i][j] > list2[i][j]: 16 list0[i][j] = 3 17 else: 18 pass

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

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

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

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

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

guest

回答3

0

ベストアンサー

各列における最大値は1つである前提の回答です。

  • zip([~])で各列ずつ、値の組(タプル)tを得ます。
  • max(v)にて値の組の最大値を得てv.index(~)で最大値に一致する、値の組のインデックス位置を得ます。

Python

1list1 = [7, 4, 3] 2list2 = [2, 1, 8] 3list3 = [9, 3, 1] 4print([t.index(max(t)) + 1 for t in zip(list1, list2, list3)]) # [3, 1, 2]

投稿2020/02/06 05:11

can110

総合スコア38341

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

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

yonhark0

2020/02/06 06:12

助かりました、ありがとうございます!
guest

0

こんにちは。
参考までに、自分ならこういうコードを書きます、というのを回答します。リスト内の最大値の要素のインデクスを得るために、 numpy.argmax を使いました。

python3

1import numpy as np 2 3list1 = [7, 4, 3] 4list2 = [2, 1, 8] 5list3 = [9, 3, 1] 6 7list0 = [1+np.argmax(t) for t in zip(list1, list2, list3)]

 

投稿2020/02/06 05:04

jun68ykt

総合スコア9058

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

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

yonhark0

2020/02/06 06:12

ありがとうございます!
guest

0

やりたいのはこうじゃないかな?

python

1list1 = [7, 4, 3] 2list2 = [2, 1, 8] 3list3 = [9, 3, 1] 4list0 = [0] * 3 5for column in range(3): 6 if list2[column] <= list1[column] >= list3[column]: 7 list0[column] = 1 8for column in range(3): 9 if list1[column] <= list2[column] >= list3[column]: 10 list0[column] = 2 11for column in range(3): 12 if list1[column] <= list3[column] >= list2[column]: 13 list0[column] = 3 14print(list0)

もっと簡単にできますよ。

python

1list0 = [column.index(max(column)) + 1 for column in zip(list1, list2, list3)]

投稿2020/02/06 04:59

編集2020/02/06 06:05
shiracamus

総合スコア5406

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

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

yonhark0

2020/02/06 06:11

助かりました、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問