怎么把一个列表中的正数和负数区分出来,并且让这些正数归为一组一组,负的归为一组一组
有三种方法可以考虑一下
最简单的方法,直接调用函数即可
import itertools
list1 = [1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,2,2,2,2,2,2,2]
for i,g in itertools.groupby(list1,lambda x:x<0):
print(list(g))
第二种方法,这里是用while先对判断count是否小于列表的长度,然后再用乘积进行判断,如果两个相乘为正的,说明这两个数属于正数或者负数,然后再进行相加,最后当count总长度等于列表长度的时候break
list= [1,1,2,3,4,5,5,6,7,-1,-2,-3,-4,5,5,6,7,8,9-1,-1,-1,-1,2,2,3,4,4,5,6,6]
list_out = []
temp = []
count =0
while count+1 < len(list):
temp.append(list[count])
while list[count] * list[count+1] >0:
temp.append(list[count+1])
count +=1
if count+1 == len(list):
break
list_out.append(temp)
temp =[]
count +=1
print(list_out)
第三种方法,是加多一个flag判断条件,先让列表进行for循环,然后对其进行判断,当该树大于0并且flag大于0的时候,s列表添加,反之则相反,最后对其进行清空,再把内容进行入栈
MyList=[1,1,2,3,4,5,5,6,7,-1,-2,-3,-4,5,5,6,7,8,1,-1,-1,-1,2,2,3,4,4,5,6,6]
s = []
flag=0
for i in MyList:
if i==0:
continue
if len(s) == 0 and i !=0 :
s.append(i)
elif i>0 and flag>=0:
s.append(i)
flag=1
elif i<0 and flag<=0:
s.append(i)
flag=-1
else:
if len(s) >= 2:
print(s)
s = [] # 清空
flag=0
s.append(i) # 入栈
# 最后一轮,需判断下
if len(s) >= 2:
print(s)