[英]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.