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

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

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

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

Python 3.x

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

Q&A

解決済

2回答

1216閲覧

Python3 複数行 リスト インデックス 変数代入

python3_beginer

総合スコア46

for

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

Python 3.x

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

0グッド

0クリップ

投稿2018/04/07 01:58

前提・実現したいこと

複数行リストのインデックスに変数を代入して正常に動作させたい。

発生している問題・エラーメッセージ

a: あたりくじ
b: リストの複数行の数
c: リストの中身
result: それぞれのリストの中にあるあたりくじ

該当のソースコード

a = ['1', '2', '3', '4', '5', '6']

b = 3

c = [['1', '5', '4', '2', '3', '6'],
['9', '6', '2', '7', '1', '5'],
['32', '9', '87', '33', '41', '60']]

result_1 = [i for i in set(a) if i in c[0]]
result_2 = [i for i in set(a) if i in c[1]]
result_3 = [i for i in set(a) if i in c[2]]

print(result_1)
print(result_2)
print(result_3)

試したこと

コードの繰り返しのため、for文を利用して簡素かしたい。

しかし、c[0],c[1],c[2]に変数を代入する方法がわかない。

result = []
for i in range(b):
if j in c[i]:
result.append(j)
print(result)

正常に動作しない。

ご教授お願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

提示コードの[i for i in set(a) if i in one]をそのまま使い、以下のようにすればよいと思います。

Python

1a = ['1', '2', '3', '4', '5', '6'] 2c = [['1', '5', '4', '2', '3', '6'], 3['9', '6', '2', '7', '1', '5'], 4['32', '9', '87', '33', '41', '60']] 5 6results = [] 7for one in c: 8 results.append([i for i in set(a) if i in one]) 9print(results) 10 11# 2重でも可 12results = [[i for i in set(a) if i in one] for one in c] 13print(results)

投稿2018/04/07 02:13

can110

総合スコア38256

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

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

python3_beginer

2018/04/07 03:13

お返事頂きありがとうございます。 提示して頂いたコードをみて、おもわず「なるほど~!」とスッキリしました! リスト内包表記まで追記して頂きありがとうございました。 複数行あるリストc の中身を繰り返し処理をしたいので、項数など考慮せずに for one in c: と書けばいいんですね! 昨晩から何度も考えていたので、解決してとても嬉しいです!ありがとうございました!
guest

0

こんなのでどうでしょう。多重のリスト内包表記とアンパック代入を利用しています。

python

1result_1, result_2, result_3 = [[i for i in set(a) if i in line] 2 for line in c]

投稿2018/04/07 02:10

hayataka2049

総合スコア30933

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

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

python3_beginer

2018/04/07 03:23

お返事頂きありがとうございます。 for line in c の全体を繰り返す発想が抜けておりました。 また、このようなスマートな書き方も目からうろこでした。 ご指導して頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問