1. ホーム
  2. パイソン

[解決済み】リストの内容を取り出して、別のリストに追加する

2022-04-06 21:27:18

質問

あるリストの内容を別のリストに追加することが理にかなっているかどうかを理解しようとしています。

最初のリストは、ファイルから特定の行を取得し、リストに保存するループ関数で作成しました。

次に、2つ目のリストを使ってこれらの行を保存し、別のファイルに対して新しいサイクルを開始します。

私のアイディアは、forサイクルが終了した時点でリストを取得し、それを2番目のリストにダンプし、それから新しいサイクルを開始し、最初のリストの内容を2番目のリストに再びダンプしますが、それを追加することで、2番目のリストは、私のループで作成したすべての小さなリストファイルの合計となることでした。リストは、特定の条件が満たされた場合にのみ追加される必要があります。

これに近いものがありそうですね。

# This is done for each log in my directory, i have a loop running
for logs in mydir:

    for line in mylog:
        #...if the conditions are met
        list1.append(line)

    for item in list1:
        if "string" in item: #if somewhere in the list1 i have a match for a string
            list2.append(list1) # append every line in list1 to list2
            del list1 [:] # delete the content of the list1
            break
        else:
            del list1 [:] # delete the list content and start all over

これは意味があるのでしょうか、それとも別のルートに行くべきなのでしょうか?

ログのリストが長く、各テキストファイルがかなり大きいので、あまりサイクルを消費しない効率的なものが必要です。

どのように解決するのですか?

あなたはおそらく

list2.extend(list1)

ではなく

list2.append(list1)

ここが違うんです。

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> c = [7, 8, 9]
>>> b.append(a)
>>> b
[4, 5, 6, [1, 2, 3]]
>>> c.extend(a)
>>> c
[7, 8, 9, 1, 2, 3]

以降 list.extend() は任意のイテラブルを受け付けるため、以下のように置き換えることもできます。

for line in mylog:
    list1.append(line)

によって

list1.extend(mylog)