2009-06-23 1 views
3

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

+2

Является ли это домашнее задание? – Jasiu

+0

Да, вы правы, это правильный подход. –

+0

не знаю, когда это домашняя работа или нет, но звучит, пожалуйста, напишите мне. –

ответ

4
for i in range(1, 11): 
    for j in range(1, 11): 
     print i * j 
5

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

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

EDIT: с помощью xrange как предложено Hank Gay

+1

Можно также использовать xrange, если вы приносите itertools. –

+0

Fyi, продукт isneeded (но meh, C-циклы вместо python), у python есть синтаксис для этого: продукт (диапазон (1,11), диапазон (1,11)) <=> (i, j для i в диапазоне (1,11) для j в диапазоне (1,11)) для x in (i * j для i в диапазоне (1,11) для j в диапазоне (1,11)): распечатать x, –

+0

, но затем снова у вас есть> 1 for-loops ;-) –

8

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

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

примечание мы должны начать второй итератор из «я 'Вместо 1, так что это вдвойне эффективного

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

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

print set(a) == set(b) 
+1

грубое отображение времени для 10000 итераций a занимает 0,8 секунды, а b занимает 2,5 секунды, а в 3 раза медленнее b - –

0

Вам не нужно вложенная for-loop решения.
единый контур с List Понимания (как показано ниже) будет достаточно:

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) 

Или Simpler:

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] 
    ]