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

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

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

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

Python

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

Q&A

解決済

3回答

713閲覧

for文内で複数のlist読み込む方法について

polpop

総合スコア6

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/07/25 20:01

編集2020/07/26 08:02

pythonのfor文について質問です。
以下のスクリプトのように3つのリストがあります。
lists3のリスト内の値を一つづつ読み込みたいのですが、うまくいきません。
そもそもスクリプトの書き方を見直す必要があるのでしょうか。。。?
色々調べて試行錯誤しておりますがうまくいかず困っています。

お詳しい方アドバイスいただけますと幸いです。
※追加情報
このコードは複数のファイルから指定した行番取得してリストに格納し、複数のファイルに対して取得した行番号間の範囲を取得する目的のコードとなります。
python3

lists1 = list(ファイルの行番号複数の数値存在) lists2 = list(ファイルの行番号複数の数値存在) lists3 = list(複数のファイル名が存在) path = 'output.txt' for lists1s , lists2s in zip(lists1,lists2): print(lists1s) print(lists2s) for x in range (lists1s,lists2s): target_line = linecache.getline(lists3, int(x)) with open(path, mode='a') as f: f.write(target_line)

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

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

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

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

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

teamikl

2020/07/26 03:18 編集

「複数の値が存在」の所を最低限で良いので、具体的に提示してください。 上記のコードで getlines の部分で lists3 をひとつづつ読み出すと、 読み込む行の数だけファイル名が必要になります。 lists1 = [1] lists2 = [5] lists3 = ["a.txt", "a.txt", "a.txt", "a.txt"] あまり考えられないようなデータ構造なので、 lists1~3 の要素数は全て同じではありませんか?
polpop

2020/07/26 08:01

ご回答いただきありがとうございます。 情報追記致しました。 リストの要素は以下のような感じです。 lists1 = [1,2,3,4] 行番号(開始) lists2 = [5,6,7,8] 行番号(終了) lists3 = ["a.txt", "b.txt", "c.txt", "d.txt"]
teamikl

2020/07/26 08:36 編集

全て同じ長さであれば、 ForestSeoさんの「同一インデックスの要素」が該当します。 但し、lists3 と lists3s の区別に注意。 linecache.getline(lists3, int(x)) <-- lists3 はリスト
guest

回答3

0

lists3のリスト内の値を一つづつ読み込みたいのですが、

iter()でイテレータを生成して、next() で読み出す方法があります。

python

1 2list1 = [1, 3, 6] 3list2 = [3, 6, 9] 4list3 = "abcdefgh" 5 6iter3 = iter(list3) 7 8for start, stop in zip(list1, list2): 9 for n in range(start, stop): 10 m = next(iter3) 11 print(n, m) 12

他には、list1, list2 のイテレータと list3 を zip で

list1 = [1, 3, 6] list2 = [3, 6, 9] list3 = "abcdefgh" from itertools import chain iter1 = chain(*map(range, list1, list2)) for n, m in zip(iter1, list3): print(n, m)

投稿2020/07/26 01:26

teamikl

総合スコア8664

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

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

teamikl

2020/07/26 03:09 編集

↑ lists3 と lists3s を読み間違えてました。 内容的に for filename, start, stop in zip(lists3, lists1, lists2): が良さそうですね。
guest

0

ベストアンサー

問題がよくわからなく、Python3.xなのか2.7なのかも分からないのですが、まずlinecache.getlineはリストに使わないのではないでしょうか?

for文内で複数のlist読み込む方法

Python

1# 同一インデックスの要素 2for lists1s, lists2s lists3s in zip(lists1, lists2, lists3): 3```とか 4```Python 5# 全通り 6from itertools import product 7for lists1s, lists2s lists3s in product(lists1, lists2, lists3): 8```とか

投稿2020/07/25 22:51

編集2020/07/25 22:57
ForestSeo

総合スコア2720

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

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

0

実現されたいことがいまいち分かりません。なさりたいことをもう少し具体的に記載されてはいかがでしょうか。
記載されたコードですと一度もlist3を使っていらっしゃらないので、??となっております。
またlist1, list2を使ってfor文を実行されていますが、こちらもどういった狙いなのか記載なさったほうが良いかと思います。

投稿2020/07/25 20:49

tenkoh

総合スコア51

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問