根据特定字符将列表拆分为较小的列表

时间:2016-11-04 19:02:41

标签: python list for-loop

我有一个来自csv文件的列表,即

list_from_csv= ["","","1","2","","","3","4"]

对于我的用例,我需要获得一个看起来像这样的列表

input_list =[[1,2],[3,4]]

所以基本上我想基于“”分隔符分隔列表 我最初尝试过这样的事情

for i in list_from_csv:
    if i != "":
       input_list.append(i)
然而,这给了我一个输出[1,2,3,4] 在python中有一个技巧或命令来实现这一点。另请注意我对python很新,所以任何帮助都将不胜感激。此外,我试图查看每个地方,但找不到这样的例子

3 个答案:

答案 0 :(得分:4)

以下是使用itertools.groupby进行此操作的一种方法:

from itertools import groupby

lst= ["","","1","2","","","3","4"]
result = [[int(i) for i in g] for k, g in groupby(lst, lambda x: x!='') if k]
print(result)
# [[1, 2], [3, 4]]

这些项目是否为空字符串。只需使用False的组密钥过滤空字符串组。

答案 1 :(得分:2)

使用itertools.groupby

>>> [list(map(int, s)) for empty, s in itertools.groupby(list_from_csv, lambda s: s=="") if not empty]
[[1, 2], [3, 4]]

答案 2 :(得分:0)

不使用任何导入的模块的替代解决方案:
输入列表有意略微复杂(对于更复杂的情况)

list_from_csv = ["","","1","2","3","","4","5", "", "", "6", "", "7"]

str = [[int(n) for n in i] for i in ''.join([d if d else ' '
       for d in list_from_csv]).strip().split(' ') if i]

print(str)

输出:

[[1, 2, 3], [4, 5], [6], [7]]