亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果另一個列表的某個條件為真,則覆蓋列表值(python)

如果另一個列表的某個條件為真,則覆蓋列表值(python)

Go
慕無忌1623718 2021-11-23 16:32:11
不幸的是,我無法更具體地說明我的標題,但舉個例子應該可以清楚地說明我的問題。我有兩個列表 f 和 a,如果 f[i] 等于 f[i-1]。我想在 f 中有一個新條目,它等于 f[i] 和 f[i-1] (顯然)并覆蓋它們。在 a 我想必須 a_new = a[i] + a[i-1] 替換 a[i] 和 a[i-1]。f = [10, 25, 50, 50, 75, 100, 1000, 1000, 1100, 1100]a = [1, 3, 2, 4, 5, 3, 10, 15, 5, 5]我想要的輸出是:f = [10, 25, 50, 75, 100, 1000, 1100]a = [1, 3, 6, 5, 3, 25, 10]我相信某種列表理解將是最佳方法,但我還想不通。我不需要成為列表理解,只要有一些解決方案我就很高興。
查看完整描述

2 回答

?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

您可以zip將列表放在一起,用于groupby按f值對對進行分組,然后a對每個組的值求和。然后你只需要將它們解壓縮回單獨的列表


from itertools import groupby

from operator import itemgetter


groups = groupby(zip(f, a), key=itemgetter(0))

f_a_generator = ((k, sum(map(itemgetter(1), pairs))) for k, pairs in groups)

f1, a1 = zip(*f_a_generator)  # map(list, ...) If you need them as lists


print(f1, a1, sep='\n')

# (10, 25, 50, 75, 100, 1000, 1100)

# (1, 3, 6, 5, 3, 25, 10)

要在評論中回答您的問題,您可以更改行


sum(map(itemgetter(1), pairs)))

調用某些函數,而不是sum:


def logarithmic_sum(values):

    return 10*np.log10(sum((10**(val/10)) for val in values))


groups = groupby(zip(f, a), key=itemgetter(0))

f_a_generator = ((k, logarithmic_sum(map(itemgetter(1), pairs))) for k, pairs in groups)

f1, a1 = zip(*f_a_generator)


print(f1, a1, sep='\n')

# (10, 25, 50, 75, 100, 1000, 1100)

# (1.0000000000000002, 2.999999999999999, 6.124426027943397, 5.0, 2.999999999999999, 16.193310480660944, 8.010299956639813)



查看完整回答
反對 回復 2021-11-23
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

對于第一個數組情況:


for i in range(1, len(f)-2):

    if f[i] == f[i-1]:

        del f[i]


print(f)


查看完整回答
反對 回復 2021-11-23
  • 2 回答
  • 0 關注
  • 250 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號