используя два цикла for в python - PullRequest
3 голосов
/ 23 июня 2009

Я недавно начал изучать python и у меня возник вопрос о циклах надеясь, что кто-то может ответить. Я хочу, чтобы можно было распечатать все возможные произведения из двух чисел от одного до десяти. Итак: 2 на 2, 2 на 3, 2 на 4 ... 2 на 10, 3 на 2, 3 на 3 ... 3 на 10, 4 на 2, 4 на 3 и т. д. Самый простой способ сделать это - использовать два цикла for, но я не уверен. Может кто-нибудь, пожалуйста, скажите мне, как это делается. Спасибо большое. asadm.

Ответы [ 4 ]

8 голосов
/ 23 июня 2009

Вот еще один способ

a = [i*j for i in xrange(1,11) for j in xrange(i,11)]

note нам нужно запустить второй итератор с 'i' вместо 1, так что это вдвойне эффективно

edit: доказательство того, что это то же самое, что и простое решение

b = []
for i in range(1,11):
    for j in range(1,11):
        b.append(i*j)

print set(a) == set(b)
5 голосов
/ 23 июня 2009

Просто для удовольствия (и читателей SO с зависимостью от itertools), используя только один цикл for:

from itertools import product
for i,j in product(xrange(1,11), xrange(1,11)):
    print i*j

РЕДАКТИРОВАТЬ: используя xrange, как предложено Хэнком Гаем

4 голосов
/ 23 июня 2009
for i in range(1, 11):
    for j in range(1, 11):
        print i * j
0 голосов
/ 07 января 2018

Возможно, вам не понадобится вложенное 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]
    ]
...