Skip to main content
 首页 » 编程设计

Python之将字符串导入列表,导入另一个列表 :)

2025年05月04日23linjiqin

基本上我想从文本文件中读取字符串,将它们三乘三地放入列表中,然后将所有这三乘三列表放入另一个列表中。其实让我解释得更好:)

文本文件(只是一个例子,我可以根据需要构建它):

party     
sleep   
study     
--------    
party    
sleep   
sleep     
-----    
study   
sleep   
party    
--------- 

等等

据此,我希望 Python 创建一个如下所示的列表:

List1 = [['party','sleep','study'],['party','sleep','sleep'],['study','sleep','party']etc] 

但是这太难了。我正在尝试类似的东西:

test2 = open('test2.txt','r') 
List=[] 
 
for line in 'test2.txt': 
    a = test2.readline() 
    a = a.replace("\n","") 
    List.append(a) 
    print(List) 

但这只会做可怕的事情。如何实现?

请您参考如下方法:

如果你想以 3 的大小对数据进行分组。假设文本文件中的数据未按任何分隔符分组。

您需要按顺序读取文件并创建一个列表。要对其进行分组,您可以使用任何已知的 grouper algorithms

from itertools import izip, imap 
with open("test.txt") as fin: 
    data = list(imap(list, izip(*[imap(str.strip, fin)]*3))) 
 
pprint.pprint(data) 
[['party', 'sleep', 'study'], 
 ['party', 'sleep', 'sleep'], 
 ['study', 'sleep', 'party']] 

执行步骤

  1. 使用文件对象创建上下文管理器。
  2. 去除每一行。 (删除换行符)
  3. 在大小为 3 的迭代器列表上使用 zip,确保项目被分组为三个项目的元组
  4. 将元组转换为列表
  5. 将生成器表达式转换为列表。

考虑到所有都是生成器表达式,它在一次迭代中完成。

相反,如果您的数据由分隔符 ------ 分隔和分组,您可以使用 itertools.groupby 解决方案

from itertools import imap, groupby 
class Key(object): 
    def __init__(self, sep): 
        self.sep = sep 
        self.count = 0 
    def __call__(self, line): 
        if line == self.sep:    self.count += 1 
        return self.count 
 
 
with open("test.txt") as fin: 
    data = [[e for e in v if "----------" not in e] 
        for k, v in groupby(imap(str.strip, fin), key = Key("----------"))] 
 
 
pprint.pprint(data) 
[['party', 'sleep', 'study'], 
 ['party', 'sleep', 'sleep'], 
 ['study', 'sleep', 'party']] 

执行步骤

  1. 创建一个键类,以在遇到分隔符时增加一个计数器。除了有条件地增加它之外,每次调用函数调用都会吐出计数器。
  2. 使用文件对象创建上下文管理器。
  3. 去除每一行。 (删除换行符)
  4. 使用 itertools.groupby 和自定义键对数据进行分组
  5. 从分组数据中删除分隔符并创建组列表。