Python:通过乘法获取一组值

时间:2017-06-18 16:55:29

标签: python

我希望通过乘法得到一个值列表,如下所示:

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

所以,我试过了:

[[2, 3]]

我得到了:

{{1}}

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您使用相同的生成器(rGen)进行外循环和内循环。你应该做的是:

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

答案 1 :(得分: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]]

答案 2 :(得分: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]
>>>