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

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

我有通过循环function创build的第一个列表,这将获得一个文件中的特定行,并将其保存在一个列表中。

然后第二个列表被用来保存这些行,并开始一个新的周期在另一个文件。

我的想法是一旦获得循环完成的列表,将其转储到第二个列表中,然后开始一个新的循环,将第一个列表的内容再次转储到第二个列表中,但将其附加到第二个列表中,所以第二个列表将是在我的循环中创build的所有较小的列表文件的总和。 只有在某些条件满足的情况下,该列表才能被附加。

它看起来像这样的东西:

# 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 = 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()接受任意的迭代,你也可以replace

 for line in mylog: list1.append(line) 

通过

 list1.extend(mylog) 

看一看itertools.chain中的一个快速的方法,将多个小列表作为一个单一的大列表(或者至less作为一个大的迭代器),而不需要复制较小的列表:

 >>> 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并在发现匹配时发出True 。 只要find第一个True元素, any()使用短路评估返回Truelist2.extend()list1的内容附加到最后。

使用map()reduce()内置函数

 def file_to_list(file): #stuff to parse file to a list return list files = [...list of files...] L = map(file_to_list, files) flat_L = reduce(lambda x,y:x+y, L) 

最小“循环”和优雅的编码模式:)