2012-02-19 5 views
0

У меня проблема, когда я хочу, чтобы вложенный цикл контура конкатенировал строку. По какой-то причине я не получаю правильный результат. Может ли кто-нибудь дать мне совет? Это должно быть просто.Строки и вложенные для циклов в Python

newRow = [] 
matrix = [] 
for i in range(0,3): 
    for j in range(0,5): 
     newRow.append(j) 
    matrix.append(newRow) 
print matrix 

python test.py 

[[0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4], 
[0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4], 
[0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4]] 

Я хочу, чтобы напечатать ...

[[0, 1, 2, 3, 4], 
[0, 1, 2, 3, 4], 
[0, 1, 2, 3, 4]] 
+5

Это не строка, это не конкатенация, и ваш отступ отключен. –

+0

... кроме того, вы отлично справляетесь! – Johnsyweb

ответ

5

Вы продолжаете добавлять к тому же newRow. Если вы хотите получить чистую строку, вам нужно создать пустую на каждой итерации:

matrix = []          newRow = [] <- the same array 
for i in range(0,3):        matrix = [] 
    newRow = [] <- a new array     for i in range(0,3): 
    for j in range(0,5):   instead of   for j in range(0,5): 
     newRow.append(j)         newRow.append(j) 
    matrix.append(newRow)       matrix.append(newRow) 

Есть, конечно, более вещий способы достижения этой цели, но я пытаюсь указать на то, что проблема с кодом.

+0

Право это имеет смысл ... спасибо! – htmlfarmer

1
matrix = [] 
for i in range(0,3): 
    matrix.append(list(range(0, 5))) 

или даже:

matrix = [list(range(0, 5)) for i in range(0, 3)] 
3

Вы можете сделать это, если вы хотите, вложенный цикл:

matrix = [ [ i for i in range(5)] for j in range(3)] 
print matrix 
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]] 
1

Вы близки, его просто вопрос правильно обзорного:

matrix = [] 
for i in range(0,3): 
    newRow = [] 
    for j in range(0,5): 
     newRow.append(j) 
    matrix.append(newRow) 
print matrix 
0

Что бы вы ни делали,

НЕ ДЕЛАТЬ ЭТО

НЕ ДЕЛАТЬ ЭТО

НЕ ДЕЛАТЬ ЭТО:

>>> x = [range(0,5)]*3 
>>> x 
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]] 
>>> x[0][0] = 'LOL' 
>>> x 
[['LOL', 1, 2, 3, 4], ['LOL', 1, 2, 3, 4], ['LOL', 1, 2, 3, 4]] 

использовать список понимание.

+1

Это дает вам три ссылки на одну и ту же строку. Если вы установите 'matrix [0] [0]', вы также эффективно устанавливаете 'matrix [1] [0]'. –

+0

LOL oops извините, исправлено. –

Смежные вопросы