根据一个字符串将字符串列表拆分成子列表。

6
这个问题最容易用伪代码来说明。我有一个像这样的列表:
linelist = ["a", "b", "", "c", "d", "e", "", "a"]

I would like to get it in the format:

questionchunks = [["a", "b"], ["c", "d", "e"], ["a"]]

我的第一次尝试是这样的:

questionchunks = []
qlist = []

for line in linelist:

    if (line != "" and len(qlist) != 0 ):
        questionchunks.append(qlist)
        qlist = []
    else: 
        qlist.append(line)

我的输出有点混乱。如果能给我一些指导,我将不胜感激。


一些答案依赖于数组内容是连续的,我怀疑在您的实际用例中并非如此? - stevejpurves
@stevejpurves - 数组内容始终是连续的,它们将具有由空字符串分隔的非空字符串组。 - user2555451
2个回答

9
你已经接近目标了,只需要进行最小编辑即可。
linelist = ["a", "b", "", "c", "d", "e", "", "a"]
questionchunks = []
qlist = []
linelist.append('') # append an empty str at the end to avoid the other condn
for line in linelist:

    if (line != "" ):
        questionchunks.append(line)      # add the element to each of your chunk   
    else: 
        qlist.append(questionchunks)   # append chunk
        questionchunks = []       # reset chunk

print qlist

我不确定 OP 对于像 ["", "a", "b", "", "c", "d", "e", "", "a", ""] 这样的输入期望得到什么输出,但是这个解决方案会为这个例子添加空列表。 - Ashwini Chaudhary
@AshwiniChaudhary 谢谢您提供的信息。它确实会添加空列表,但是在一行中删除它们不是很容易吗?再次感谢。 - Bhargav Rao

8
这可以很容易地使用itertools.groupby来完成:
>>> from itertools import groupby
>>> linelist = ["a", "b", "", "c", "d", "e", "", "a"]
>>> split_at = ""
>>> [list(g) for k, g in groupby(linelist, lambda x: x != split_at) if k]
[['a', 'b'], ['c', 'd', 'e'], ['a']]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接