Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果另一个列表的特定条件为true,则覆盖列表值(python)_Python_List_List Comprehension_Overwrite - Fatal编程技术网

如果另一个列表的特定条件为true,则覆盖列表值(python)

如果另一个列表的特定条件为true,则覆盖列表值(python),python,list,list-comprehension,overwrite,Python,List,List Comprehension,Overwrite,不幸的是,我不能更具体地说明我的标题,但一个例子应该可以清楚地说明我的问题。我有两个列表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,

不幸的是,我不能更具体地说明我的标题,但一个例子应该可以清楚地说明我的问题。我有两个列表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]
我相信某种形式的列表理解是最佳的方法,但我还没弄明白。不过,我不需要理解列表,只要有解决方案,我就很高兴。

您可以将列表压缩在一起,使用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以外的函数,请执行以下操作:

对于第一种阵列情况:

for i in range(1, len(f)-2):
    if f[i] == f[i-1]:
        del f[i]

print(f)

我希望我在f中的最后一个条目是f[I]请你更好地解释一下你的意思好吗?尝试一下@yatu。我会很感激@meowgoesthedog的任何解决方案。我最初没有问这个问题,因为我认为这不会是一个问题:我如何实现对数加法而不是简单求和?因此,与a_new=a[i]+a[i-1]不同,我实际上想做以下工作:a_new=10*np.log1010**a[i]/10+10**a[i-1]/10@Larzeb我已经编辑了我的答案。基本上,您需要编写一个执行该计算的函数,然后调用它而不是sum
for i in range(1, len(f)-2):
    if f[i] == f[i-1]:
        del f[i]

print(f)