首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将元素连接到列表中,直到找到特定的元素,然后跳过它并添加其余的元素

将元素连接到列表中,直到找到特定的元素,然后跳过它并添加其余的元素
EN

Stack Overflow用户
提问于 2019-02-05 14:43:20
回答 2查看 208关注 0票数 0

我有一个列表,其中包含来自某些日志的数据,在这些日志中,日志的每一行都被写入一个新元素,并且在它完成并再次继续时,它也是一个\n (new line)

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

示例:

ONEONEONEsun.nio.ch.EPollArrayWrapper.epollWait(Native方法)\n,‘tat sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)\n','\tat sun.nio。ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)\n','\tat sun.nio.ch.Se lectorImpl.lockAndDoSelect(SelectorImpl.java:86)\n',‘\t锁定<0x0012550080d3 fe80> ( io.netty.channel.nio.SelectedSelectionKeySet)\n',’\t锁定<0x0445000 '\n','\n',‘tat TWOTWOTWO.nio.ch.EPollArrayWrapper.epollWait(Native方法’)\ n',‘tat sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)\n','\ta t sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)\n',’\t .nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)\n',‘\t锁定<0x00 00000085d3fez0> (a io.netty.channel.nio.SelectedSelectionKeySet)\n',’\t锁定<0x0000000080d40f80>,'\n‘)

我想添加以下元素

‘\\tat ONEONEONEsun.nio.ch.EPollArrayWrapper.epollWait(Native方法’\n‘,'\tat sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)\n','\tat sun.nio。ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)\n','\tat sun.nio.ch.Se lectorImpl.lockAndDoSelect(SelectorImpl.java:86)\n',‘\t锁定<0x0012550080d3 fe80> ( io.netty.channel.nio.SelectedSelectionKeySet)\n',’\t锁定<0x0445000 '\n‘)

进入一个字符串并将其发送到另一个列表中,跳过\n元素,然后再次将其从下一个元素添加到找到下一个\n,以此类推。有可能吗?我已经尝试了下面的方法,但是整个代码都被添加了。

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

我的代码:

lines3 = []

对于x在范围(0,len(lines1)):如果lines1x == "\n":传递其他: word =“.join(Lines1)”行3.追加(Word)

对不起,上面的语法没有被接受为代码,因此更新为引号。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-05 14:49:33

我将您的问题解释为“如何将我的字符串列表拆分为列表字符串列表,根据一个由单个换行符组成的字符串的存在将它们分开?”

可以使用groupby识别换行符,而不是换行符,并将每组不只是换行符的字符串追加到结果列表中:

代码语言:javascript
运行
复制
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)

结果:

代码语言:javascript
运行
复制
[['foo', 'bar'], ['baz', 'qux']]
票数 1
EN

Stack Overflow用户

发布于 2019-02-05 15:13:13

您可以这样做:假设list1包含您的输入数据

代码语言:javascript
运行
复制
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'周围的元素进行分组。

代码语言:javascript
运行
复制
from itertools import groupby

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

如果您打印list2元素,则上述两种方法都应该是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54536887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档