[英]how to count consecutive in a list?
我有一个列表decider = [1,1,1,1,1,0,0,0,1,1,1,0,0,0,0]
。 在这个列表中,我想在 1 前面打印 +150,在 0 前面打印 -150。但条件是,你只能连续输入 +150 或 -150 最多 4 次,之后你必须输入 0如果仍然在列表中,您将得到 0 或 1。预期 Output:
decider result
1 150
1 150
1 150
1 150
1 0
0 -150
0 -150
0 -150
1 150
1 150
1 150
0 -150
0 -150
0 -150
0 -150
我的方法:
test = [1,1,1,0,0,0,0,1,1,1,1]
Charge_counter = 0
Discharge_counter = 0
charge = []
discharge = []
for i in test:
if i ==1:
Charge_counter += 1
if Charge_counter <=4:
charge.append(150)
else:
charge.append(0)
else:
Discharge_counter += 1
if Discharge_counter <= 4:
discharge.append(-150)
else:
discharge.append(0)
print(charge)
print(discharge)
Charge_counter
和Discharge_counter
test = [1,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0]
charge = 0
discharge = 0
ans_charged = []
ans_discharged = []
for i in test:
if i == 1 and charge < 4:
ans_charged.append(150)
ans_discharged.append(0)
charge +=1
discharge = 0
elif i == 1:
ans_charged.append(0)
ans_discharged.append(0)
discharge = 0
elif i == 0 and discharge < 4:
ans_discharged.append(-150)
ans_charged.append(0)
discharge += 1
charge = 0
elif i == 0:
ans_discharged.append(0)
ans_charged.append(0)
charge = 0
print(ans_charged)
print(ans_discharged)
[150, 150, 150, 150, 0, 0, 0, 0, 0, 0, 150, 150, 150, 0, 0, 0, 0]
[0, 0, 0, 0, 0, -150, -150, -150, -150, 0, 0, 0, 0, -150, -150, -150, -150]
如果您被允许使用itertools
那么您可以这样做:
import itertools
decider = [1,1,1,1,1,0,0,0,1,1,1,0,0,0,0]
temp = [150 if i==1 else -150 for i in decider]
runs = [list(i[1]) for i in itertools.groupby(temp)]
print(runs) # [[150, 150, 150, 150, 150], [-150, -150, -150], [150, 150, 150], [-150, -150, -150, -150]]
runs = [i[:4]+[0]*(len(i)-4) for i in runs]
print(runs) # [[150, 150, 150, 150, 0], [-150, -150, -150], [150, 150, 150], [-150, -150, -150, -150]]
result = list(itertools.chain(*runs))
print(result) # [150, 150, 150, 150, 0, -150, -150, -150, 150, 150, 150, -150, -150, -150, -150]
说明:我首先将1
更改为150
并将其他所有内容更改为-150
,然后我发现连续运行 150 和 -150 (请注意, itertools.groupby
以这种方式工作,而不是 SQL GROUP BY
),然后我为每个子列表先获得 4元素并将其与(原始长度 - 4)零连接。 请注意,在 Python 中,将list
乘以负数是合法的(这会导致空list
),因此我不必为短列表实现特殊情况。 最后,我将list
的list
扁平化为扁平list
。
解决方案:不需要 2 个列表。 需要重新设置charge_counter = 0和discharge_counter = 0的值
test = [1,1,1,1,1,0,0,0,1,1,1,0,0,0,0]
charge_counter = 0
discharge_counter = 0
charge = []
for i in test:
if i ==1 and charge_counter <4:
charge.append(150)
charge_counter += 1
discharge_counter = 0
elif i ==0 and discharge_counter <4:
charge.append(-150)
discharge_counter += 1
charge_counter = 0
else:
charge.append(i)
print(charge)
您需要在“if i == 1”条件下将 Discharge_counter 设置为 0,在“else”条件下您还需要将 Charge_counter 设置为 0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.