将一个列表的内容添加到另一个列表中

339 投票
9 回答
406796 浏览
提问于 2025-04-17 06:33

我想弄明白,把一个列表的内容添加到另一个列表里是否有意义。

我有一个列表,是通过循环函数创建的,这个函数会从一个文件中提取特定的行,并把它们保存到这个列表里。

然后我用第二个列表来保存这些行,并开始对另一个文件进行新的循环。

我的想法是,在第一个循环结束后,把第一个列表的内容放到第二个列表里,然后开始新的循环,再把第一个列表的内容追加到第二个列表中,这样第二个列表就会包含我在循环中创建的所有小列表的内容。只有在满足某些条件时,才会把内容追加到第二个列表。

这看起来有点像这样:

# 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

这样做有意义吗,还是我应该换个方法?

我需要一种高效的方法,因为日志列表很长,每个文本文件也相当大;所以我觉得使用列表会比较合适。

相关问题:

9 个回答

17

你还可以用'+'这个符号把两个列表(比如说a和b)合并在一起。

a = [1,2,3,4]
b = [4,5,6,7]
c = a + b

Output:
>>> c
[1, 2, 3, 4, 4, 5, 6, 7]
23

回顾一下之前的回答。如果你有一个列表 [0,1,2] 和另一个列表 [3,4,5],想把它们合并成 [0,1,2,3,4,5],你可以使用 扩展链接 的方法,了解它们的区别可以帮助你更好地选择适合自己需求的方法。

扩展列表

使用 list 类的 extend 方法,你可以把一个列表的元素复制到另一个列表里。不过,这样会占用额外的内存,通常情况下没问题,但如果你想节省内存,这可能会造成一些困扰。

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

这里插入图片描述

链接列表

相反,你可以使用 itertools.chain 来连接多个列表,这样会返回一个叫做 迭代器 的东西,可以用来遍历这些列表。这种方法更节省内存,因为它并不是复制元素,而只是指向下一个列表。

import itertools
a = [0,1,2]
b = [3,4,5]
c = itertools.chain(a, b)

这里插入图片描述

创建一个迭代器,从第一个可迭代对象中返回元素,直到用完为止,然后继续到下一个可迭代对象,直到所有可迭代对象都用完。用于将连续的序列视为一个单一的序列。

608

你可能想要的是

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)

撰写回答