按特定关键字分割文本



我有一个列表,我想把列表中某个单词后面的单词添加到一个新的列表中。

exp输入

list =["split","foo","foo","foo","split","mama","mama","split","orange","melon"]

exp输出

list =["split","foo","foo","foo"]
["split","mama", "mama"   ]
["split","orange","melon" ]

我遇到了一个逻辑错误,我检查了列表的每一个子元素,并试图将对象向上抛出到下一个参数中,放入一个新的列表。


for i in liste:
if i.lower() == "split":
x = True
if x:
new_list.append(i)

我不知道在第一个循环之后该做什么。如何重置bool值并创建新列表?

您可以简单地迭代并跟踪当前访问的集合。

l =["split","foo","foo","foo","split","mama","mama","split","orange","melon"]
ans = []
curr = []
split_word = "split"
for i in l:
if i != split_word:
curr.append(i)
else:
if curr:
ans.append(curr)
curr = [i]
if curr:
ans.append(curr)
print(ans)
# [['split', 'foo', 'foo', 'foo'], ['split', 'mama', 'mama'], ['split', 'orange', 'melon']]

当输入为'split'时,您可以在输出列表中添加一个空子列表,而不是使用标志,并继续将当前字符串添加到输出中的最后一个子列表中:

lst =["split","foo","foo","foo","split","mama","mama","split","orange","melon"]
output = []
for s in lst:
if s == 'split':
output.append([])
output[-1].append(s)
print(output)

这个输出:

[['split', 'foo', 'foo', 'foo'], ['split', 'mama', 'mama'], ['split', 'orange', 'melon']]

使用list Comprehension:

l =["split","foo","foo","foo","split","mama","mama","split","orange","melon"]

idx = [0, len(l)]
[idx.insert(-1, i) for i, value in enumerate(l) if value == "split"]   
splitted_l = [l[idx[i]:idx[i+1]] for i in range(len(idx)-1)]    # Because idx[i+1] we just need to check (len(idx)-1)

结果:

# splitted_l : 
[[],
['split', 'foo', 'foo', 'foo'],
['split', 'mama', 'mama'],
['split', 'orange', 'melon']]

  • 由于列表中的第一个split,它首先创建一个空列表。如果你想,可以删除空列表:
idx = [0, len(l)]
[idx.insert(-1, i) for i, value in enumerate(l) if value == "split"]   
splitted_l = [l[idx[i]:idx[i+1]] for i in range(len(idx)-1)]
if splitted_l[0] == [] : splitted_l.remove([])    # Delete empty list at first if exist

结果:

# splitted_l : 
[['split', 'foo', 'foo', 'foo'],
['split', 'mama', 'mama'],
['split', 'orange', 'melon']]

最新更新