根据值将列表拆分为较小的列表?

时间:2015-12-22 10:40:26

标签: python

说我有一个清单:[1, 2, 3, 4, -1, 5, 6, 7, -1, 0, 0, 3, 2, 1]

我想将此列表拆分为使用值-10, 0作为分隔符:

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

(注意空的第3个清单)

我将如何实现这一目标?我目前的解决方案只是一个简单的循环,但我想知道是否有更多的pythonic解决方案(使用列表推导)用于任何长度的分隔符?

按要求提供当前解决方案(凌乱和hacky:P)

string = '|'.join([str(x) for x in data]).replace('-1', ',').replace('0|0', ',')
buckets = [x.split('|') if y for x in string.split(',')]

3 个答案:

答案 0 :(得分:1)

这不是一件轻而易举的事,但你可以这样做:

my_list = [1, 2, 3, 4, -1, 5, 6, 7, -1, 0, 0, 3, 2, 1]

my_list = ','.join(map(str, my_list))
my_list = [x.split(',') for y in my_list.split('0,0,') for x in y.split(',-1,')]
my_list = [map(int, x) if x != [''] else [] for x in my_list]

答案 1 :(得分:0)

使用简单的for loop and check conditions

<强>代码:

lst = [1, 2, 3, 4, -1, 5, 6, 7, -1, 0, 0, 3, 2, 1,-1,0]
output_lst = []
check = 0
sample=[]
for val in lst:
    if val == -1 :
        output_lst.append(sample)
        check = 0
        sample = []
        continue
    if val == 0 :       

        if check ==1 :
            output_lst.append(sample[:-1])
            check = 0
            sample = []
            continue
        check = 1
    sample.append(val)
if check ==1:
    output_lst.append(sample)
print output_lst

<强>输出:

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

答案 2 :(得分:0)

试试这个

使用一次迭代来完成它。

ar = [1, 2, 3, 4, -1, 5, 6, 7, -1, 0, 0, 3, 2, 1]
data  = ', '.join(map(str, ar))
import re
data = re.split(", -1,| 0, 0,",data)
bucket = []
import ast
for y in data:
    hac = ast.literal_eval("["+y+"]")
    bucket.append(hac)
print bucket