0

次のようなリストがあります。

a = ['1 MB', '2 MB']

a のすべての要素を合計したい。

最初に整数リストを作成し、sum() 関数を使用する必要があると考えました。どうやってやるの?

4

4 に答える 4

2

ビルトインを使用しsplitて、数値を残りの文字列から分離します

>>> a = ['1 MB', '2 MB']
>>> sum([int(s.split(' ')[0]) for s in a])
3

s.split(' ')リストを作成します['1', 'MB']

または、ジェネレーター式を使用して、リスト内包表記が作成する不要なリストを回避します。

>>> a = ['1 MB', '2 MB']
>>> sum(int(s.split(' ')[0]) for s in a)
3
于 2013-01-31T10:38:57.507 に答える
1

すべての要素が で終わると仮定すると' MB'、次のことができます。

sum(map(int, (x[:-3] for x in a)))

壊す:

  • (x[:-3] for x in a)文字列の最後の 3 文字を除くすべてを取ります。
  • map(int, iterable)int関数を iterable の各要素に「マップ」します。
  • sum(iterable)iterable の要素を単純に合計します。
于 2013-01-31T10:39:31.767 に答える
0

これは、異なる乗数に対して機能します。

import re
pattern = "(\d+)\s*(\w+)?"

a = ['1 MB', '2 MB', '3 K', '250' ]

multiplier = { None: 1, 'MB' : 1000000, 'K' : 1000 }

def multi(m):
    if m:
        return int(m.group(1)) * multiplier[m.group(2)]
    else:
        return 0

r = map(multi, [ re.search(pattern, x) for x in a])
print r

print sum(r)

次の出力で:

[1000000, 2000000, 3000, 250]
3003250
于 2013-01-31T11:31:27.383 に答える
0

ここで使用できregexます:

In [19]: a = ['1 MB', '2 MB']

In [20]: sum(int(re.search(r'\d+',x).group()) for x in a)
Out[20]: 3

wherere.search(r'\d+')は次のようなものを返します。

In [23]: [re.search(r'\d+',x).group() for x in a]
Out[23]: ['1', '2']
于 2013-01-31T10:41:28.227 に答える