Форум сайта python.su
0
Привет всем, ребят подскажите, как из одномерного массива(размерность у него всегда разная), сделать двумерный? просто у меня так получается, что до определенного момента удобнее работать с одномерным массивом, а потом использовать двумерный. Я прогуглила, но так и не поняла, может быть алгоритм какой есть? буду очень благодарна за любую помощь:)
Офлайн
568
kateПредположим, есть список
Привет всем, ребят подскажите, как из одномерного массива(размерность у него всегда разная), сделать двумерный? просто у меня так получается, что до определенного момента удобнее работать с одномерным массивом, а потом использовать двумерный. Я прогуглила, но так и не поняла, может быть алгоритм какой есть? буду очень благодарна за любую помощь:)
l=[1,2,3,4,5,6,7,8,9]
l=[
[1,2,3],
[4,5,6],
[7,8,9]
]
l=[
[1,2,3,4,5],
[6,7,8,9, None]
]
Офлайн
568
Короче, зависит от задачи. Давайте конкретный пример.
Офлайн
0
На мой ламерский взгляд можно воспользовать numpy. В нем можно менять размерность массива в любой момент. Хоть сколько мерный хоть какой длины по осям.
Пример вот отсюда: http://habrahabr.ru/post/121031/
>>> a.ravel() # делает массив плоским
array([ 7., 5., 9., 3., 7., 2., 7., 8., 6., 8., 3., 2.])
>>> a.shape = (6, 2)
>>> a.transpose()
array([[ 7., 9., 7., 7., 6., 3.],
[ 5., 3., 2., 8., 8., 2.]])
Офлайн
0
FishHookНу вот к примеру у меня есть массив Q = , насколько я понимаю он одномерный, так? а мне нужно обратится к нему, как к двумерному:
Короче, зависит от задачи. Давайте конкретный пример.
def funk(Q):
x = len(Q)
y = len(Q[0])
y = len(Q[0])
TypeError: object of type 'int' has no len()
Офлайн
0
kateскорее всего так и есть, можете описать задачу более полно? что это за функция и что она должна делать?
Может я конечно, что-то не так делаю и что-то не так понимаю
Офлайн
0
Может так?
Q или Q
Офлайн
0
YanzayНу собственно сюда мне нужно передать массив вида Q = . Вызываю я эту функцию и ловлю ошибку про которую писала выше.kateскорее всего так и есть, можете описать задачу более полно? что это за функция и что она должна делать?
Может я конечно, что-то не так делаю и что-то не так понимаю
def funk(S):
x = len(S)
y = len(S[0])
result = [[0 for j in range(y)] for i in range(x)]
result[0][0] = S[0][0]
for i in range(1, x):
result[i][0] = S[i][0] + result[i - 1][0]
for i in range(1, y):
result[0][i] = S[0][i] + result[0][i - 1]
for i in range(1,x):
for j in range(1, y):
result[i][j] = S[i][j] + result[i - 1][j] + \
result[i][j - 1] + result[i - 1][j - 1]
return result
Офлайн
1
funk() чтото делает
Офлайн
5
Раз уж тайна задачи остается за 7 замками то объясним хотяб ей что за ошибка )
Q - последовательность, итерируемый объект
число (такое как 5, 18 или 69) - не итерируемый объект
Так вот функция len над итерируемым объектом возвращает количество, если список то количество элементов, если строка то количество символов.
Вы же когда запрашиваете len(S) спрашиваете чему равна длина первого элемента списка, т.е. len(1) на что и получаете ошибку. А ведь действительно нельзя ж подсчитать длину числа.
В итоге вы либо говорите конкретную задачу которую вам нужно решить и получаете решение за пол часа, т.е. приводите пример двухмерного массива. Либо если вам нужен репетитор чтобы спрашивать а что в этой строчке не так, а что в этой, я думаю желающих по уменьшится :)
Офлайн