LINUX.ORG.RU
ФорумTalks

Господа питонщики, разрулите ситуацию =)


0

0

Можно ли вообще кортежи использовать как многомерные массивы(с определенным кол-вом элементов), или че вообще делать-то?

Итак вариант с одномерным:

>>> x = [0]*3
>>> x
[0, 0, 0]

выдает нормально, двумерный массив размером 3 элемента.

вариант с двумерным:

>>> x = [[0]*3]*3
>>> x
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

Вроде бы тоже все верно, теперь выдает двумерный массив 3х3, но:

>>> x[2][2] = 4
>>> x
[[0, 0, 4], [0, 0, 4], [0, 0, 4]]

Выдает сразу такое безобразие, прозреваю, что операция "*n" плодит ссылки и не более. Как правильно определять двумерные кортежи, или вообще чем бы их заменить-то?

★★★★★
Ответ на: комментарий от DerKetzer

Перцептрон на питоне пишу.

Надо в двойном цикле массив перебирать двумерный, который строго определеный n*n сперва думал пользоваться в цикле чем-то типа .append() в массиве, но нахожу эту затею костылем.

Siado ★★★★★
() автор топика

Если тебе нужен такой "сишный" подход к объявлению массивов, то посмотри на numpy. И это кстати у не кортежи, а списки у тебя в примере.

anotheranonymous
()
Ответ на: комментарий от DerKetzer

А, в целом задача такая, что должно быть так:

>>> x[2][2] = 4

>>> x

[[0, 0, 0], [0, 0, 0], [0, 0, 4]]

>>> x[1][0] = 3

>>> x

[[0, 0, 0], [3, 0, 0], [0, 0, 4]]

Siado ★★★★★
() автор топика
Ответ на: комментарий от anotheranonymous

>Ну или a = [[0]*3 for _ in [0]*3]

Ни за что бы не догадался, но работает, спасибо ))

Siado ★★★★★
() автор топика
Ответ на: комментарий от DerKetzer

Ссылка хороша, но самому охота все это дело написать ;)

Siado ★★★★★
() автор топика

Гуглить на тему mutable / immutable objects. Вкратце:

x = [[0] * 3] * 3
создает не три одномерных массива, а один одномерный, и делает на него три ссылки - x[0], x[1], x[2]. Решение уже вроде как подсказали. Только мне вариант
x = [[0] * 3 for i in xrange(3)]
нравится больше - меньше объектов создается.

ksv
()
Ответ на: комментарий от ksv

Хрена себе, а еще говорят, что у перла синтаксис запутанный.

x = [[0] * 3] * 3 - это однозначно воспринимается как массив 3x3.

Sun-ch
()
Ответ на: комментарий от Sun-ch

>Хрена себе, а еще говорят, что у перла синтаксис запутанный.
А ну пшел разбираться, как знаменитый однострочник на перле работает. И пока не разберешься - не возникать.

anotheranonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.