2017-06-18 13 views
0
私は、値のリストを取得したい

により、値の集合を取得します:だからはPythonは:このように、乗算により、乗算

[[1, 2, 3], [2, 4, 6], [3, 6, 9]] 

、私が試した:

rGen = (i for i in range(1, 4)) 
matriz = [[x * y for y in rGen] for x in rGen] 

そして、私が取得します:

[[2, 3]] 

どうすればこの問題を解決できますか?

+0

あなたは内側のリストの要素を乗算したいです? – zaidfazil

+0

はい、最初のリストにあります。 – capm

答えて

1

、このような何かを行うことができますか?

>>> r=range(1,4) 
>>> [[x * y for x in r] for y in r] 
[[1, 2, 3], [2, 4, 6], [3, 6, 9]] 

違いは、ジェネレータの使用方法と割り当て方法です。この例(Pythonの2.xの)によって示されているように:最初の例で

>>> r1=(i for i in range(1,4)) 
>>> r2=range(1,4) 
>>> r3=[i for i in range(1,4)] 

>>> r1 
<generator object <genexpr> at 0x6ffffe1e4b0> 
>>> r2 
[1, 2, 3] 
>>> r3 
[1, 2, 3] 

>>> [[x * y for x in r1] for y in r1] 
[[2, 3]] 
>>> [[x * y for x in r2] for y in r2] 
[[1, 2, 3], [2, 4, 6], [3, 6, 9]] 
>>> [[x * y for x in r3] for y in r3] 
[[1, 2, 3], [2, 4, 6], [3, 6, 9]] 

r1)他の二つの例では、あなたがリストを取得しながら、あなたは、一度だけあなたのシーケンスを生成しますジェネレータオブジェクトを取得しますネストされたリストの理解に使用できます(アクセス回数に関係なく、常に同じ評価をします)。 Pythonの3.xでは

は、range()異なるタイプを返しますが、動作は同じです:

>>> r1=(i for i in range(1,4)) 
>>> r2=range(1,4) 
>>> r3=[i for i in range(1,4)] 

>>> r1 
<generator object <genexpr> at 0x6ffffe7a518> 
>>> r2 
range(1, 4) 
>>> r3 
[1, 2, 3] 

>>> [[x * y for x in r1] for y in r1] 
[[2, 3]] 
>>> [[x * y for x in r2] for y in r2] 
[[1, 2, 3], [2, 4, 6], [3, 6, 9]] 
>>> [[x * y for x in r3] for y in r3] 
[[1, 2, 3], [2, 4, 6], [3, 6, 9]] 
1

外部ループと内部ループの両方で同じジェネレータ(rGen)を使用しています。あなたがすべきことは次のとおりです。

matrix = [[x * y for y in range(1,4)] for x in range(1,4)] 
0

各リストの要素の積を返すには、あなたがこのよう

>>> import operator 
>>> from functools import reduce 
>>> a = [[1, 2, 3], [2, 4, 6], [3, 6, 9]] 
>>> [reduce(operator.mul, i, 1) for i in a] 
[6, 48, 162] 
>>>