a = [2,2,2,3,4,5,5,6,6,6,7,7]
b = [1,2,3,4,5,6,7,8,9,10,11,12]
我想在' b'中加上数字。在' a'是相同的并删除' a'中的重复数字,因此输出应如下所示:
a = [2,3,4,5,6,7]
b = [6,4,5,13,27,23]
答案 0 :(得分:1)
使用列表推导,将两个列表压缩在一起:
sums = [sum(y for x, y in zip(a, b) if x == i) for i in [j[0] for j in groupby(a)]]
答案 1 :(得分:0)
您可以使用izip_longest
和collections.defaultdict
这是解决此问题的快速而全面的方法,因为a
和b
的长度不同:
>>> from collections import defaultdict
>>> from itertools import izip_longest
>>> d=defaultdict(int)
>>> for i,j in izip_longest(a,b):
... d[i]+=j
...
>>> d
defaultdict(<type 'int'>, {2: 6, 3: 4, 4: 5, 5: 13, 6: 27, 7: 23})
>>> d.values()
[6, 4, 5, 13, 27, 23]
但正如Padraic Cunningham所指出的那样,虽然在这种情况下答案是真的,但没有订购。
作为替代答案但效率较低,您可以使用itertools.groupby
:
>>> from itertools import izip_longest,groupby
>>> from operator import itemgetter
>>> [sum([i[1] for i in g]) for _,g in groupby(izip_longest(a,b),key=itemgetter(0))]
[6, 4, 5, 13, 27, 23]
答案 2 :(得分:0)
OrderedDict.fromkeys
将在a
中创建一组元素并保持顺序:
a = [2,2,2,3,4,5,5,6,6,6,7,7]
b = [1,2,3,4,5,6,7,8,9,10,11,12]
from collections import OrderedDict
from itertools import islice
od = OrderedDict.fromkeys(a,0,)
for ele in a:
od[ele] += 1
it = iter(b)
sums = [sum(islice(it,v)) for v in od.values()]
print(list(od))
print(sums)
[2, 3, 4, 5, 6, 7]
[6, 4, 5, 13, 27, 23]
如果你使用套装,你将没有保证订单,也不清楚你的列表a
中是否有重复的元素,如果是这样的话会发生什么。
使用以后的重复元素:
a = [2, 2, 2, 3, 4, 5, 5, 6, 6, 7, 6, 7, 7]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,13]
from collections import OrderedDict
from itertools import islice, count
it = iter(a)
seq = 1
prev = next(it)
cn = count()
od = OrderedDict()
for ele in it:
if ele == prev:
seq += 1
else:
od[next(cn)] = seq
seq = 1
prev = ele
if prev == ele:
seq += 1
od[next(cn)] = seq
st_a = OrderedDict.fromkeys(a)
it = iter(b)
sums = [sum(islice(it, v)) for v in od.values()]
print(list(st_a))
print(sums)
[0, 1, 2, 3, 4, 5, 6, 7]
[6, 4, 5, 13, 17, 10, 11, 25]
答案 3 :(得分:-1)
list(set(a))
应该满足第一部分。通过总结b中的simialar数字,不确定你的意思。似乎如果你这样做,那么b应该等于[6,3,4,10,18,14]。
编辑:(我还没有足够的代表发表评论,所以我会在这里提出我的问题。)所以看起来你正在总结索引?
编辑以澄清代码:将列表a转换为集合将删除所有重复项,然后列表转换回列表。我认为这就是OP所要求的。