代码之家  ›  专栏  ›  技术社区  ›  sdgd

在列表中加入元素,直到找到某个元素,然后跳过该元素并添加其余元素

  •  0
  • sdgd  · 技术社区  · 7 年前

    我有一个列表,其中包含来自某些日志的数据,其中日志的每一行都作为新元素和 \n (new line) 当它完成并再次继续时。

    我的想法是添加所有元素,直到在列表中找到为止,\n并将它们添加到一个字符串中,然后将其发送到另一个列表,并继续此过程直到结束。

    例子:

    方法)\n','\t ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)\n','\t sun.nio.ch.Se fe80>(a io.netty.channel.nio.SelectedSelectionKeySet)\n','\t-锁定<0x0445000 '\n'、'\n'、'\t twoo.nio.ch.EPollArrayWrapper.epollWait(本机方法)\ n','\t sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)\n','\ta t sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)\n', 000000 85D3FEZ0>(一个io.netty.channel.nio.SelectedSelectionKeySet)\n','\t-锁定

    我想从中添加元素

    `'\tat onesun.nio.ch.EPollArrayWrapper.epollWait(本机) 方法)\n','\t '\t sun.nio。 ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)\n','\t '\t-已锁定<0x0012550080d3 fe80>(一) io.netty.channel.nio.SelectedSelectionKeySet)\n','\t-锁定

    输入一个字符串并将其发送到另一个列表,跳过 \n 元素,并再次将其从下一个元素添加到下一个元素 \n

    我试着分析一些来找我们的日志,它们被困在这里。

    我的代码:

    for x in range(0, len(lines1)):
        if lines1[x] == "\n":
            pass
        else:
            word = "".join(lines1)
            lines3.append(word)
    

    很抱歉,上面的语法未被接受为代码,因此更新为引号。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Kevin    7 年前

    我将您的问题解释为“如何将我的字符串列表分割成一个字符串列表,并根据是否存在由单个换行符组成的字符串来分隔它们?”。

    你可以用 groupby 要仅标识换行符字符串而不仅仅是换行符字符串,并将每组不只是换行符字符串附加到结果列表中,请执行以下操作:

    list1 = [
        "foo", 
        "bar",
        "\n",
        "baz",
        "qux"
    ]
    
    import itertools
    result = []
    for k,v in itertools.groupby(list1, key=lambda line: line=="\n"):
        #when k is true, v is a collection of newlines, which we don't care about.
        #so only append when k is false.
        if not k:
            result.append(list(v))
    
    print(result)
    

    结果:

    [['foo', 'bar'], ['baz', 'qux']]
    
        2
  •  0
  •   Mohammad Azim    7 年前

    您可以简单地执行以下操作: 假设 list1 包含您的输入数据

    temp = list()
    list2 = list()
    for line in list1:
        if line == '\n':
            list2.append(' '.join(temp))
            temp = list()
        else:
            temp.append(line)   # cache elements until '\n'
    

    你可以用一种更奇特的方式 itertools.groupby 围绕元素对元素进行分组的步骤 '\n' :

    from itertools import groupby
    
    list2 = [''.join(group) for f, group in groupby(list1, lambda x: x == '\n') if not f]
    

    如果你打印 list2

    推荐文章