1

メソッドを使用せずに、特定のリストのコンテンツを別の特定のリストで拡張するにはどうすればよい.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がリストにtags2回表示されます。

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

3 に答える 3

4

おそらくこれにはカウンターが必要です。

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})
于 2013-03-15T18:59:12.630 に答える
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)

順序が重要でない場合は、より簡単に and を取得する方法がoutありioutます。

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

リストのペアを使用する必要ない場合Counterは、直接操作することが問題に自然に適合します。

于 2013-03-15T19:00:29.843 に答える
0

順序を維持する必要がある場合は、Counter の代わりに OrderedDict を使用できます。

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())ます。

于 2013-03-15T19:03:35.853 に答える