странности с массивами!

 
0
 
Python
ava
RM2010 | 19.03.2010, 19:57
Ребята, привет.
Есть массив figbox который, по сути надо обработать нижеследующим алгоритмом.


a=figbox

figbox[0]=a[8]; figbox[1]=a[4]; figbox[2]=a[0]; figbox[3]=0
figbox[4]=a[9]; figbox[5]=a[5]; figbox[6]=a[1]; figbox[7]=0
figbox[8]=a[10]; figbox[9]=a[6]; figbox[10]=a[2]; figbox[11]=0
figbox[12]=0; figbox[13]=0; figbox[14]=0; figbox[15]=0



то есть на 0ое место поставить то, что было на 8м, на 1ое то, что было на 4ом, на 2ое, то что было на 0им и т.д.
но почему-то сие не работает и оно пытается так же изменить временный массив 'a' и на выходе получается какой-то компот.
Kommentare (4)
ava
ToshaCh | 20.03.2010, 15:29 #
А все питонисты такие недоброжелательные? Между прочим парень отметил самую непонятную для новичка вещь в пистоне, а вы его посту лепите минусы.

Фишка здесь в том, что знак = в питоне не является оператором присваиванивая, точнее он не всегда работает так. В данном случае это создание алиаса. Штудируй документацию, как сделать через ж... по уму. :)

ava
Gunjy | 20.03.2010, 19:09 #
Поскольку массивов как таковых в Python нет, то можно попробовать использовать словари.

Создаём и заполняем временный словарь


a = {} # Создаём временный словарь

for i in range(16): # Заполняем его таким образом, что 3-й, 7-й, а также элементы, начиная с 11-го равны нулю

if i == 3 or i == 7 or i >= 11:
a[i] = "zero"
else:
a[i] = "value" + str(i)


I = [8,4,0,3,9,5,1,7,10,6,2,11,12,13,14,15]
# Создаём список ключей словаря a, в порядке, в котором они будут использоваться при заполнении нового словаря

figbox = {}

for i in range(16): # Заполняем наш новый словарь по порядку от 0 до 15, использую список I
figbox[i] = a[I[i]]



В итоге получаем словарь a:


{0: 'value0', 1: 'value1', 2: 'value2', 3: 'zero', 4: 'value4', 5: 'value5',
6: 'value6', 7: 'zero', 8: 'value8', 9: 'value9', 10: 'value10',
11: 'zero', 12: 'zero', 13: 'zero', 14: 'zero', 15: 'zero'}


Словарь figbox:


{0: 'value8', 1: 'value4', 2: 'value0', 3: 'zero', 4: 'value9', 5: 'value5',
6: 'value1', 7: 'zero', 8: 'value10', 9: 'value6', 10: 'value2', 11: 'zero',
12: 'zero', 13: 'zero', 14: 'zero', 15: 'zero'}
ava
Fenrir13 | 21.03.2010, 08:48 #
Код a = fightbox на самом деле создаёт в a ссылку на fightbox. Для копирования массива можно явно присваивать копию: a = fightbox[:] Запись индекса в виде [:] означает "все элементы".
ava
RM2010 | 24.03.2010, 18:50 #
Ребята, спасибо! Сделал вот так:

a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] ### creating temp.array
for i in range(len(figbox)): a[i]=figbox[i] ### assing values from 'figbox' to temp
figbox[0]=a[8]; figbox[1]=a[4]; figbox[2]=a[0]; figbox[3]=0 ### turn everything right
figbox[4]=a[9]; figbox[5]=a[5]; figbox[6]=a[1]; figbox[7]=0 ### turn everything right
figbox[8]=a[10]; figbox[9]=a[6]; figbox[10]=a[2]; figbox[11]=0 ### turn everything right
figbox[12]=0; figbox[13]=0; figbox[14]=0; figbox[15]=0 ### turn everything right


А общий результат можно увидеть вот здесь! http://forum.vingrad.ru/forum/act-ST/f-79/...7/unread-1.html

user posted image
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden