说我有一个清单:[1, 2, 3, 4, -1, 5, 6, 7, -1, 0, 0, 3, 2, 1]
我想将此列表拆分为使用值-1
或0, 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(',')]
答案 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