微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

字符串分为列表列表-页面,行,单词

如何解决字符串分为列表列表-页面,行,单词

带有以下字符串:

string='10 11 12Line13 14 15LinePage16 17 18Line19 20 21LinePage'


这会将其分为页面和行:

stringsplit=[l.split('Line') for l in string.split("Page")]

结果:

[['10 11 12','13 14 15',''],['16 17 18','19 20 21',['']]

如何拆分Line元素(即单词),以便每个元素都可以访问:

stringsplit[0][0][0]显示10

解决方法

您可以使用地图

string = "10 11 12Line13 14 15LinePage16 17 18Line19 20 21LinePage"

stringsplit = [
    list(map(lambda item: item.split(" "),l.split("Line"))) for l in string.split("Page")
]

# Output: [[['10','11','12'],['13','14','15'],['']],[['16','17','18'],['19','20','21'],[['']]]

但这很混乱,很难看。您可以执行其他功能。

def split(arr: list):
    return list(map(lambda item: item.split(" "),arr))

string = "10 11 12Line13 14 15LinePage16 17 18Line19 20 21LinePage"

stringsplit = [split(l.split("Line")) for l in string.split("Page")]

这可能比大多数其他嵌套列表理解答案要干净得多,因为您可以知道发生了什么而无需计算括号和内容。

,

您可以使用以下列表理解来过滤出空拆分:

string = '10 11 12Line13 14 15LinePage16 17 18Line19 20 21LinePage'

result = [[word for word in line.split() if word]
          for page in string.split('Page') if page
          for line in page.split('Line') if line]
print(result)

哪个产量

[['10',['16','21']]
,

您可以将列表理解升级为嵌套列表理解:

stringsplit = [
    [l.split() for l in p.split("Line")]
    for p in string.split("Page")
]

print(stringsplit[0][0][0]) # 10

如果要过滤空白行和页面:

stringsplit = [
    [l.split() for l in p.split("Line") if l]
    for p in string.split("Page") if p
]
,

您应该能够再次重新应用相同的逻辑以获得所需的结果。

testStr = '10 11 12Line13 14 15LinePage16 17 18Line19 20 21LinePage'

ans = [[line.split(' ') for line in page.split('Line')] for page in testStr.split('Page')]

# ans[0][0][0] = 10
,

对于嵌套结果

s='10 11 12Line13 14 15LinePage16 17 18Line19 20 21LinePage'

sp=[
    [
        [n for n in l.split(' ') if n] 
        
        for l in p.split('Line') if l
    ]
    for p in s.split('Page') if p
]
# [[['10','15']],'21']]]

结果平坦

>>> sp=[
...     n
...     for p in s.split('Page') if p
...     for l in p.split('Line') if l
...     for n in l.split(' ') if n
... ]
>>> sp
['10','12','13','15','16','18','19','21']

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。