我最近开始学习 python 并且有一个关于 for 循环的问题,我希望有人能回答。我希望能够打印从一到十的两个数字的所有可能产品。所以:2 x 2、2 x 3、2 x 4...2 x 10、3 x 2、3 x 3...3 x 10、4 x 2、4 x 3 等等...我本来以为最简单的方法是使用两个 for 循环,但我不确定。谁能告诉我这是怎么做到的。
问问题
96904 次
4 回答
15
这是另一种方式
a = [i*j for i in xrange(1,11) for j in xrange(i,11)]
请注意,我们需要从 'i' 而不是 1 开始第二个迭代器,所以这是双倍高效的
编辑:证明它与简单的解决方案相同
b = []
for i in range(1,11):
for j in range(1,11):
b.append(i*j)
print set(a) == set(b)
于 2009-06-23T14:26:16.707 回答
7
for i in range(1, 11):
for j in range(1, 11):
print i * j
于 2009-06-23T14:01:16.850 回答
7
只是为了好玩(以及对 itertools 上瘾的 SO 读者),只使用一个 for 循环:
from itertools import product
for i,j in product(xrange(1,11), xrange(1,11)):
print i*j
编辑:按照 Hank Gay 的建议使用 xrange
于 2009-06-23T14:07:09.770 回答
0
您可能不需要嵌套for-loop
解决方案。
具有列表理解的单循环(如下所示)就足够了:
r_list = list(range(2, 11))
output = []
for m in r_list:
tmp = [m*z for z in r_list]
output.append(tmp)
print(output)
或更简单:
output = []
for m in list(range(2, 11)):
tmp = [m*z for z in list(range(2, 11))]
output.append(tmp)
print(output)
印刷:
[
[4, 6, 8, 10, 12, 14, 16, 18, 20],
[6, 9, 12, 15, 18, 21, 24, 27, 30],
[8, 12, 16, 20, 24, 28, 32, 36, 40],
[10, 15, 20, 25, 30, 35, 40, 45, 50],
[12, 18, 24, 30, 36, 42, 48, 54, 60],
[14, 21, 28, 35, 42, 49, 56, 63, 70],
[16, 24, 32, 40, 48, 56, 64, 72, 80],
[18, 27, 36, 45, 54, 63, 72, 81, 90],
[20, 30, 40, 50, 60, 70, 80, 90, 100]
]
于 2018-01-07T14:49:23.050 回答