使用Python中的另一个列表刷新列表内容

时间:2013-03-15 18:54:38

标签: python list extend

如何在不使用方法.extend()的情况下使用其他给定列表扩展给定列表的内容?我想我可以使用词典。

代码

>>> tags  =['N','O','S','Cl']
>>> itags =[1,2,4,3]

>>> anew =['N','H']
>>> inew =[2,5]

我需要一个返回刷新列表的函数

tags  =['N','O','S','Cl','H'] 
itags =[3,2,4,3,5]

当一个元素已经在列表中时,会添加另一个列表中的数字。如果我使用extend()方法,则元素N将在列表tags中出现两次:

>>> tags.extend(anew)
>>>itags.extend(inew)
>>> print tags,itags
     ['N','O','S','Cl','N','H'] [1,2,4,3,5,2,5]

3 个答案:

答案 0 :(得分:4)

你可能想要一个Counter

from collections import Counter
tags = Counter({"N":1, "O":2, "S": 4, "Cl":3})
new = Counter({"N": 2, "H": 5})

tags = tags + new
print tags

输出:

Counter({'H': 5, 'S': 4, 'Cl': 3, 'N': 3, 'O': 2})

答案 1 :(得分:1)

如果元素的顺序很重要,我会像这样使用collections.Counter

from collections import Counter

tags  = ['N','O','S','Cl']
itags = [1,2,4,3]

new  = ['N','H']
inew = [2,5]

cnt = Counter(dict(zip(tags, itags))) + Counter(dict(zip(new, inew)))
out = tags + [el for el in new if el not in tags]
iout = [cnt[el] for el in out]

print(out)
print(iout)

如果订单无关紧要,可以通过更简单的方式获取outiout

out = cnt.keys()
iout = cnt.values()

如果您 没有使用一对列表,那么直接使用Counter非常适合您的问题。

答案 2 :(得分:0)

如果您需要维护订单,可能需要使用OrderedDict而不是Counter:

from collections import OrderedDict

tags = ['N','O','S','Cl']
itags = [1,2,4,3]

new = ['N','H']
inew = [2,5]

od = OrderedDict(zip(tags, itags))
for x, i in zip(new, inew):
    od[x] = od.setdefault(x, 0) + i

print od.keys()
print od.values()

在Python 3.x上,使用list(od.keys())list(od.values())