在python中选择以零分隔的子数组
给出如下列表:在python中选择以零分隔的子数组,python,list,zero,sub-array,Python,List,Zero,Sub Array,给出如下列表: A = [18, 7, 0, 0, 0, 9, 12, 0, 0, 11, 2, 3, 3, 0, 0, 7, 8] 有没有一种简单的方法来创建子阵列,使用那些由零(或至少由NaN)分隔的元素?我是说,比如: A1 = [18, 7] A2 = [9, 12] A3 = [11, 2, 3, 3] A4 = [7, 8] 我写过: q=0 for i in range(0,len(A)): if A[i]-A[i-1] < 1: q=q+1 q
A = [18, 7, 0, 0, 0, 9, 12, 0, 0, 11, 2, 3, 3, 0, 0, 7, 8]
有没有一种简单的方法来创建子阵列,使用那些由零(或至少由NaN)分隔的元素?我是说,比如:
A1 = [18, 7]
A2 = [9, 12]
A3 = [11, 2, 3, 3]
A4 = [7, 8]
我写过:
q=0
for i in range(0,len(A)):
if A[i]-A[i-1] < 1:
q=q+1
q=0
对于范围(0,len(A))中的i:
如果A[i]-A[i-1]<1:
q=q+1
检索列表中存在的零数据包数。但我需要填充子数组,只要我在列表中遇到它们。。。可能是有split
功能的东西?提前谢谢。试试这个:
import itertools as it
A = [18, 7, 0, 0, 0, 9, 12, 0, 0, 11, 2, 3, 3, 0, 0, 7, 8]
[list(v) for k, v in it.groupby(A, lambda x: not x) if not k]
=> [[18, 7], [9, 12], [11, 2, 3, 3], [7, 8]]
试试这个:
import itertools as it
A = [18, 7, 0, 0, 0, 9, 12, 0, 0, 11, 2, 3, 3, 0, 0, 7, 8]
[list(v) for k, v in it.groupby(A, lambda x: not x) if not k]
=> [[18, 7], [9, 12], [11, 2, 3, 3], [7, 8]]
嗯,
itertools
为您提供了解决方案:groupby(list,filter)
如果要按零分组,请从执行以下操作开始:
B = itertools.groupby(A, lambda x:x == 0)
lambda表达式“决定”哪些值应该是分隔符。您可以使用lambda x:x==None
(例如)通过None
s进行分隔。这将返回一个iterable对象。因此,使用列表理解,让我们对其进行迭代(每次迭代都会给出一个2值元组):
输出将类似于:
[(假,[18,7]),(真,[0]),(真,[0]),(真,[0]),…]
现在,作为分隔符的每个列表j
都有一个i值True
。因此,我们可以对其进行过滤:
C = [list(j) for i, j in B if not i]
现在,结果是一个二维列表:
[[18,7],[9,12],[11,2,3,3],[7,8]]
所以一个线性函数:
def splitArr():
return [list(j) for i, j in itertools.groupby(A, lambda x:x == 0) if not i]
嗯,
itertools
为您提供了解决方案:groupby(list,filter)
如果要按零分组,请从执行以下操作开始:
B = itertools.groupby(A, lambda x:x == 0)
lambda表达式“决定”哪些值应该是分隔符。您可以使用lambda x:x==None
(例如)通过None
s进行分隔。这将返回一个iterable对象。因此,使用列表理解,让我们对其进行迭代(每次迭代都会给出一个2值元组):
输出将类似于:
[(假,[18,7]),(真,[0]),(真,[0]),(真,[0]),…]
现在,作为分隔符的每个列表j
都有一个i值True
。因此,我们可以对其进行过滤:
C = [list(j) for i, j in B if not i]
现在,结果是一个二维列表:
[[18,7],[9,12],[11,2,3,3],[7,8]]
所以一个线性函数:
def splitArr():
return [list(j) for i, j in itertools.groupby(A, lambda x:x == 0) if not i]
朴素的解决方案:
A = [18, 7, 0, 0, 0, 9, 12, 0, 0, 11, 2, 3, 3, 0, 0, 7, 8]
b = []
c = []
for i in A:
if i == 0:
if len(c):
b.append(c)
c = []
continue
c.append(i)
if len(c):
b.append(c)
朴素的解决方案:
A = [18, 7, 0, 0, 0, 9, 12, 0, 0, 11, 2, 3, 3, 0, 0, 7, 8]
b = []
c = []
for i in A:
if i == 0:
if len(c):
b.append(c)
c = []
continue
c.append(i)
if len(c):
b.append(c)
当然有办法,你试过什么吗?请给我们看看你的代码。可能重复:当然有办法,你试过什么吗?请出示您的代码。可能重复:谢谢!那正是我要找的for@urgeo不客气!希望您阅读所有内容,而不仅仅是最终解决方案;-)非常感谢。那正是我要找的for@urgeo不客气!希望您阅读所有内容,而不仅仅是最终解决方案;-)