我只有一个列表,可以包含任意数量的元素。
['jeff','ham','boat','','my','name','hello']
如何根据空白字符串元素将一个列表分为两个列表或任意数量的列表?
然后将所有这些列表放入一个列表中。
答案 0 :(得分:3)
如果确定列表中只有一个空白字符串,则可以使用str.index
查找空白字符串的索引,然后相应地对列表进行切片:
index = lst.index('')
[lst[:index], lst[index + 1:]]
如果列表中可能有多个空白字符串,则可以这样使用itertools.groupby
:
lst = ['jeff','ham','boat','','my','name','hello','','hello','world']
from itertools import groupby
print([list(g) for k, g in groupby(lst, key=bool) if k])
这将输出:
[['jeff', 'ham', 'boat'], ['my', 'name', 'hello'], ['hello', 'world']]
答案 1 :(得分:1)
使用itertools.groupby
,您可以执行以下操作:
from itertools import groupby
lst = ['jeff','ham','boat','','my','name','hello']
[list(g) for k, g in groupby(lst, key=bool) if k]
# [['jeff', 'ham', 'boat'], ['my', 'name', 'hello']]
使用bool
作为分组键功能可以利用以下事实:空字符串是唯一的非真实字符串。
答案 2 :(得分:0)
这是使用简单迭代的一种方法。
例如:
myList = ['jeff','ham','boat','','my','name','hello']
result = [[]]
for i in myList:
if not i:
result.append([])
else:
result[-1].append(i)
print(result)
输出:
[['jeff', 'ham', 'boat'], ['my', 'name', 'hello']]
答案 3 :(得分:0)
让list_string作为您的列表。这应该可以解决问题:
list_of_list=[[]]
for i in list_string:
if len(i)>0:
list_of_list[-1].append(i)
else:
list_of_list.append([])
基本上,您创建一个列表列表,然后遍历原始的字符串列表,每次遇到一个单词时,都将其放在列表列表的最后一个列表中,并且每次遇到''时,您可以在列表列表中创建一个新列表。您的示例的输出为:
[['jeff','ham','boat'],['my','name','hello']]
答案 4 :(得分:0)
我不确定这是您要尝试的操作,但是请尝试:
my_list = ['jeff','ham','boat','','my','name','','hello']
list_tmp = list(my_list)
final_list = []
while '' in list_tmp:
idx = list_tmp.index('')
final_list.append(list_tmp[:idx])
list_tmp = list_tmp[idx + 1:]