簡體   English   中英

如何在列表中連續計算?

[英]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_counterDischarge_counter
  • 無需使用 2 個列表

解決方案

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)

Output

[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 ),因此我不必為短列表實現特殊情況。 最后,我將listlist扁平化為扁平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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM