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

新手上路,请多包涵

我试图了解获取列表的内容并将其附加到另一个列表是否有意义。

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

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

我的想法是在 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

这有意义还是我应该走另一条路?

我需要一些不会占用太多周期的高效工具,因为日志列表很长而且每个文本文件都非常大;所以我认为这些列表符合目的。

原文由 user1006198 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 330
2 个回答

你可能想要

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)

原文由 Sven Marnach 发布,翻译遵循 CC BY-SA 4.0 许可协议

回顾一下以前的答案。 If you have a list with [0,1,2] and another one with [3,4,5] and you want to merge them, so it becomes [0,1,2,3,4,5] , you can either use chainingextending 并且应该知道它们的区别以便根据您的需要明智地使用它。

扩展列表

使用 listextend 方法,您可以将一个列表中的元素复制到另一个列表中。然而,这将导致额外的内存使用,这在大多数情况下应该没问题,但如果您想要提高内存效率,则可能会导致问题。

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

在此处输入图像描述

链表

相反,您可以使用 itertools.chain 连接许多列表,这将返回所谓的 iterator 可用于迭代列表。这是更有效的内存,因为它不是复制元素而是指向下一个列表。

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

在此处输入图像描述

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

原文由 user1767754 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题