获取列表的内容并将其附加到另一个列表

2024-04-24 03:04:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着理解把一个列表的内容附加到另一个列表中是否有意义。

我通过循环函数创建了第一个列表,它将从文件中获取特定行并将它们保存在列表中。

然后使用第二个列表保存这些行,并在另一个文件上开始新的循环。

我的想法是在for循环完成后获取列表,将其转储到第二个列表中,然后开始一个新循环,将第一个列表的内容再次转储到第二个列表中,但将其追加,因此第二个列表将是在循环中创建的所有较小列表文件的总和。只有在满足某些条件时,才必须附加该列表。

看起来像是这样:

# 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

这有意义吗?还是我应该换条路走?

我需要一些高效的东西,不会占用太多的周期,因为日志列表很长,每个文本文件都相当大;所以我认为列表会适合这个目的。


Tags: 文件thein内容列表forstringif
3条回答

你可能想要

list2.extend(list1)

而不是

list2.append(list1)

区别在于:

>>> a = range(5)
>>> b = range(3)
>>> c = range(2)
>>> b.append(a)
>>> b
[0, 1, 2, [0, 1, 2, 3, 4]]
>>> c.extend(a)
>>> c
[0, 1, 0, 1, 2, 3, 4]

由于list.extend()接受任意iterable,因此也可以替换

for line in mylog:
    list1.append(line)

list1.extend(mylog)

查看itertools.chain可以快速地将许多小列表视为单个大列表(或至少是单个大列表),而不必复制较小的列表:

>>> import itertools
>>> p = ['a', 'b', 'c']
>>> q = ['d', 'e', 'f']
>>> r = ['g', 'h', 'i']
>>> for x in itertools.chain(p, q, r):
        print x.upper()

这对你要做的事情来说是相当合理的。

稍短一点的版本依赖Python来完成更多的繁重工作,可能是:

for logs in mydir:

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

    if any(True for line in list1 if "string" in line):
        list2.extend(list1)
    del list1

    ....

只要找到匹配项,(True for line in list1 if "string" in line)就会在list上迭代并发出Trueany()在找到第一个True元素时使用短路计算返回Truelist2.extend()list1的内容追加到末尾。

相关问题 更多 >