python readlines()每次都创建一个新列表

时间:2014-07-11 05:43:03

标签: python

所以基本上我试图取一个文件并根据文件在文件中的位置将其分解。

所以我有一个看起来像这样的方法

def sort_file(f):
    #print(f.read())
    mnemonics = []
    mnemonic_line = []
    next(f)#skip the default group on the first line
    for line in f.readlines():
        mnemonic_line.append(line[0:3])
        mnemonic_line.append(line[5:8])
        #print(line[5:8])
        #print(line[9:69])
        #print(line[69:139])
        #print(line[139:190])
        mnemonics.append(mnemonic_line)
        #del mnemonic_line[:]
        pdb.set_trace()
        #print(line.split())
        #print(len(line))

我正在尝试创建一个列表列表,其中每行是一个列表,整个文件是一个行列表。

所以我想我明白问题是什么,但我不知道如何解决它。从我可以告诉它,每次我通过并添加到列表中我使用我的原始列表,每次增长。

(Pdb) print mnemonics
[['CTM', 'ABS']]
(Pdb) c
(Pdb) print mnemonics
[['CTM', 'ABS', 'CTM', 'ACA'], ['CTM', 'ABS', 'CTM', 'ACA']]
(Pdb) c
(Pdb) print mnemonics
[['CTM', 'ABS', 'CTM', 'ACA', 'CTM', 'ACC'], ['CTM', 'ABS', 'CTM', 'ACA', 'CTM', 'ACC'], ['CTM', 'ABS', 'CTM', 'ACA', 'CTM', 'ACC']]

正如你所看到的,我的mnemonic_line列表每次循环都会增长,并在1,2,3,4 ......处重新添加自身,其值为当前循环。

我认为我需要做的是每次创建一个新列表并将其添加到我的列表列表中,以便我的输出看起来像这样

[['CTM', 'ABS'],['CTM', 'ACA'],['CTM', 'ACC']]

任何有关如何做到这一点的帮助将不胜感激:)

3 个答案:

答案 0 :(得分:2)

在循环中将mnemonic_line附加到mnemonics之后,您没有清除(或重新初始化)for line in f.readlines(): mnemonic_line.append(line[0:3]) mnemonic_line.append(line[5:8]) mnemonics.append(mnemonic_line) mnemonic_line = [] 。这就是我的意思:

{{1}}

答案 1 :(得分:1)

您只需将mnemonic_line = []转换为for循环:

def sort_file(f):
    #print(f.read())
    mnemonics = []
    next(f)#skip the default group on the first line
    for line in f.readlines():
        mnemonic_line = [] # <------
        mnemonic_line.append(line[0:3])
        mnemonic_line.append(line[5:8])
        mnemonics.append(mnemonic_line)
        pdb.set_trace()

答案 2 :(得分:0)

看看你的代码。您每次迭代都会mnemonic_line追加mnemonics,但您没有清除mnemonic_line

查看此内容然后将其应用于您的代码

>>> lol = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> a = [] # your mnemonics
>>> b = [] # your mnemonic_line
>>> for line in lol:
        b.append(line[:2])
        a.append(b)
>>> a
[[[1, 2], [4, 5], [7, 8]], [[1, 2], [4, 5], [7, 8]], [[1, 2], [4, 5], [7, 8]]]
>>> b
[[1, 2], [4, 5], [7, 8]]
>>> a = []
>>> b = []
>>> for line in lol:
        b = []
        b.append(line[:2])
        a.append(b)
>>> a
[[[1, 2]], [[4, 5]], [[7, 8]]]
>>> b
[[7, 8]]