2

関数を使用してPythonでリストを乗算するにはどうすればよいですか? これは私が持っているものです:

    list = [1, 2, 3, 4]
    def list_multiplication(list, value):
         mylist = []
         for item in list:
              for place in value:
               mylist.append(item*value)
    return mylist

だから私はこれを使って list*list (1*1, 2*2, 3*3, 4*4) を乗算したい

したがって、出力は1、4、9、および16になります。2番目のリストが何でもかまいませんが、Pythonでこれを行うにはどうすればよいですか? ありがとう

4

6 に答える 6

9

私のお気に入りの方法は、mul演算子を 2 つのリストにマッピングすることです。

from operator import mul

mul(2, 5)
#>>> 10

mul(3, 6)
#>>> 18

map(mul, [1, 2, 3, 4, 5], [6, 7, 8, 9, 10])
#>>> <map object at 0x7fc424916f50>

map、少なくとも Python 3 では、ジェネレーターを返します。したがって、リストが必要な場合は、リストをキャストする必要があります。

list(map(mul, [1, 2, 3, 4, 5], [6, 7, 8, 9, 10]))
#>>> [6, 14, 24, 36, 50]

しかし、それまでには、zip'd リストに対してリスト内包表記を使用する方が理にかなっているかもしれません。

[a*b for a, b in zip([1, 2, 3, 4, 5], [6, 7, 8, 9, 10])]
#>>> [6, 14, 24, 36, 50]

最後の 1 つを説明するには、zip([a,b,c], [x,y,z])(生成するジェネレーター) を与え[(a,x),(b,y),(c,z)]ます。

は、各ペアを変数およびにfor a, b in「アンパック」し、それらを乗算します。(m,n)aba*b

于 2013-09-26T00:25:07.237 に答える
4

リスト内包表記を使用できます。

>>> t = [1, 2, 3, 4]
>>> [i**2 for i in t]
[1, 4, 9, 16]

1*1, 2*2, etc数を 2 乗することと同じであることに注意してください。


2 つのリストを乗算する必要がある場合は、次のことを考慮してzip()ください。

>>> L1 = [1, 2, 3, 4]
>>> L2 = [1, 2, 3, 4]
>>> [i*j for i, j in zip(L1, L2)]
[1, 4, 9, 16]
于 2013-09-26T00:22:25.780 に答える
0

2 つのリストがAありB、同じ長さの場合、最も簡単なのはzipそれらのリストです。

>>> A = [1, 2, 3, 4]
>>> B = [5, 6, 7, 8]
>>> [a*b for a, b in zip(A, B)]
[5, 12, 21, 32]

zipそれがどのように機能するかを理解するために、単独で見てください。

>>> zip(A, B)
[(1, 5), (2, 6), (3, 7), (4, 8)]
于 2013-09-26T00:25:36.717 に答える