1
def run(first, second):
    sum=[]
    for i in range(len(first)):
        third.append(second[i]+first[i])
    return sum

print run([1,2,3],[10,20,30])

コードは正常に動作し、3 つの要素を含むリストを出力します。各要素は、"second" と "first" の同じインデックスの 2 つの要素の合計です。具体的には[11, 22, 33]. 同じ結果を返すためのより簡単なアプローチはありますか?

4

5 に答える 5

2

もちろん、zip()組み込み関数リスト内包表記を使用してください:

def run(first, second):
    return [a + b for a, b in zip(first, second)]

デモ:

>>> def run(first, second):
...     return [a + b for a, b in zip(first, second)]
... 
>>> print run([1,2,3],[10,20,30])
[11, 22, 33]
于 2013-02-04T12:52:02.943 に答える
2

そして、zipを回避する別の方法を指摘するだけですが、マップを導入します...(そして、読みにくい、または気に入らない人もいます...)

from operator import add
third = map(add, first, second)
于 2013-02-04T13:00:05.877 に答える
0

組み込み関数mapsum、およびzipを使用できます。

>>> map(sum, zip([1, 2, 3], [10, 20,30]))
[11, 22, 33]
于 2013-02-04T12:59:05.770 に答える
0

Martijn が投稿した最も簡単なオプション:

def run(a, b):
    return [x + y for x, y in zip(a, b)]

考えられる改善の 1 つは、2 つだけでなく、任意の数のリストで機能するようにすることです。

def run(*args):
    return [sum(p) for p in zip(*args)]

もう 1 つの一般化は、他の演算子を許可することです。

def run(func, *args):
    return map(func, *args)

そして、例えば:

import operator

print run(operator.add, [1,2,3],[10,20,30])  # [11, 22, 33]
print run(operator.sub, [1,2,3],[10,20,30])  # [-9, -18, -27]

3 つのケースすべてにおいて、runas a separate 関数は必要なく、単純に組み込み呼び出しに置き換えることができることに注意してください。

于 2013-02-04T13:01:11.480 に答える
0

別の方法として、 を使用することもできますが、異なるリストの長さを処理する場合のとmapの違いに注意することは興味深いことです。zipmap

ほとんどの場合、@Marijn Pieters のソリューションは、リストの処理がよりかわいらしくて柔らかいzipので、あなたが望むことをすると思います。zip

In [414]: first = [1,2,3]
In [415]: second = [10,20,30]
In [416]: [a + b for a, b in zip(first, second)]
Out[416]: [11, 22, 33]

In [417]: import operator
In [418]: map(operator.add, first, second)
Out[418]: [11, 22, 33]

In [419]: second = [10,20,30,40]
In [420]: [a + b for a, b in zip(first, second)]
Out[420]: [11, 22, 33]

In [421]: map(operator.add, first, second)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-421-dd15f26f1e89> in <module>()
----> 1 map(operator.add, first, second)

TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

In [422]: map(None, first, second)
Out[422]: [(1, 10), (2, 20), (3, 30), (None, 40)]
于 2013-02-04T13:09:07.013 に答える