使用
我有一个列表,我想把列表中某个单词后面的单词添加到一个新的列表中。
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']]