如果元素包含“>”,则在列表中插入字符

2024-10-01 15:32:29 发布

您现在位置:Python中文网/ 问答频道 /正文

每当元素中有“>;”时,我都会尝试将“a”插入到文件内容列表中。下面的代码成功地在“>;”之后插入了一个“a”元素,但最后2个“>;”元素除外。我不明白为什么。你知道吗

def specialparseFile(fname):
    filesContent = list()
    with open(fname) as f:
        lines = [i.strip() for i in f]
        lines = [line for line in lines if line]
        for i in lines:
            filesContent.append(i)

        for x in range(len(filesContent)):

            if '>' in filesContent[x]:
                filesContent.insert(x + 1, 'a')
    print(filesContent)
    return filesContent

Tags: 文件代码ingt元素内容列表for
3条回答

@Nick A的回答很好地解释了bug的根本原因,另一种方法是通过使用以下代码删除for循环并完全忘记list的索引:

def specialparseFile(fname):
    with open(fname) as f:
        lines = filter(None, map(lambda x: x.strip(), f))
        result = [[l, 'a'] if '<' in l else [l] for l in lines]
        return sum(result, []) # flatten the nested list generated by previous line of code

例如,假设您的filesContentl

l = ['>', 'b', '>']

它的长度为3,因此for循环将通过索引0、1和2进行循环。在索引0之后,数组将是:

l = ['>', 'a', 'b', '>']

现在您可以看到您的问题了,最后的>将永远不会到达索引3处。你知道吗

相反,您可以向后循环以解决此问题:

range(len(filesContent) - 1, -1, -1)

或者如果你喜欢:

reversed(range(len(filesContent)))

现在循环2,1,0,在第一次迭代之后,您将有:

l = ['>', 'b', '>', 'a']

下一个索引是1,很明显,上一个添加不会影响仍然需要循环的列表。你知道吗

也可以在同一个循环中执行这两个操作

...
for item in lines:
    filesContent.append(item)
    if ">" in item:
        filesContent.append( "a" )

相关问题 更多 >

    热门问题