Найти - Пользователи
Полная версия: запись одномерного массива в двумерный
Начало » Python для новичков » запись одномерного массива в двумерный
1 2
omon3
(питон3)Короче пытаюсь разобраться почему массивы не могут нормально переводиться из одной системы счисления в другую, но пока безуспешно. Поэтому упростил задачу до минимума, чтобы не заморачиваться с этим, и работать со строками, но и тут возникают не разрешимые для меня проблемы))

Нужно одномерный массив а перезаписать в массив z, в виде двумерного массива, где каждый символ массива а записывается, как отдельный элемент. То есть, по сути, построить такой массив:
0 1 1 0
1 1 1 1
0 0 0 0
из такого 0110,1111,0000

Вот пример моего гавнокода, Проблема в предпоследней строчке:
"z[i,j]= s[j]
TypeError: list indices must be integers, not tuple"   
a =  ['0110','1111','0000']
z = []
for i in range (2):
        for j in range (3):
            s=a[i]
            z[i,j]= s[j]
print (z[i,j])

ОГРОМНАЯ ПРОСЬБА по возможности только модернизировать мой гавнокод и немного объяснить, ибо синтаксис языка плохо знаю и всякие упрощения не идут на пользу.
JOHN_16
omon3
Ок . тогда первое что вам надо освоить это то что на ВСЕХ вменяемых форумах, код вставляется в специальные теги. Освоите это - можно будит переоформить должным образом топик и помогать вам дальше.
omon3
JOHN_16
Сегодня обнаружил что квадратные скобки куда-то пропали)
 a =  ['0110','1111','0000']
z = []
for i in range (2):
for j in range (3):
s=a[i]
z[i,j]= s[j]
print (z[i,j])
Rodegast
a = ['0110','1111','0000']
z = [ list(x) for x in a ]
> ОГРОМНАЯ ПРОСЬБА по возможности только модернизировать мой гавнокод и немного объяснить, ибо синтаксис языка плохо знаю и всякие упрощения не идут на пользу.
a = ['0110','1111','0000']
z = []
for x in a:
    z.append(list(x))
omon3
Мне нужно чтобы каждая цифра массива А'0110','1111','0000' (тоесть разделить 0 элемент 0110 на отдельные элементы 0,1,1,0 и.т.д.) была элементом ДВУМЕРНОГО массива Z:
0 1 1 0
1 1 1 1
0 0 0 0
Где Z[1,1] это 1, Z[0,0] это 0 и.т.д.

Я попытался записывать элемент a (по идее же это строчный тип данных) в переменную s, а дальше по-символьно записать в массив z, но именно предпоследняя строчка отказываться работать и пишет:
z[i,j]= s[j]
TypeError: list indices must be integers, not tuple
Главные вопросы это:
Как понять эту ошибку, ведь все индексы записаны в стиле списка,а не кортежа??
Почему не работает и как исправить?
 
a =  ['0110','1111','0000']
z = []
for i in range (2):
        for j in range (3):
            s=a[i]
            z[i,j]= s[j]
print (z[i,j])        
Rodegast
> Мне нужно чтобы каждая цифра массива А'0110','1111','0000' …..
Во блин…. Ты бы хоть для приличия запустил то что я тебе написал, а потом бы возмущался.

> Как понять эту ошибку, ведь все индексы записаны в стиле списка,а не кортежа??
Это значит что нельзя втыкать в срез кортежи.
omon3
Rodegast
> Мне нужно чтобы каждая цифра массива А'0110','1111','0000' …..Во блин….
Ты бы хоть для приличия запустил то что я тебе написал, а потом бы возмущался.
Ты думаешь я просто так писал все это?)) Я наверно что-то не понимаю, НО при попытке вызвать элемент массива z пишет ошибку.
a =  ['0110','1111','0000']
z = []
a = ['0110','1111','0000']
z = [ list(x) for x in a ]
print (z[0,1])
----------------
print (z[0,1])
TypeError: list indices must be integers, not tuple

Если просто вывести массив то получается не такое как предполагается при двумерном массиве
0 1 1 0
1 1 1 1
0 0 0 0
а вот что:
print (z)
>>>[['0', '1', '1', '0'], ['1', '1', '1', '1'], ['0', '0', '0', '0']]
Для меня это не совсем понятно ибо похоже на одномерные массивы в одномерном массиве. Конечно можно это потом вывести в виде матрицы
Вот мои опыты с этим, и что получается на выходе:
print (z[1])
>>>['1', '1', '1', '1']
print (z[1][1])
>>>0
Вопросы:
Тоесть массив в питоне записывается в виде z[i][j], а не z[i,j]???
Я переделал код под
z[i][j]
----------------------
a =  ['0110','1111','0000']
z = []
for i in range (2):
        s=a[i]
        for j in range (3):
            z[i][j]= s[j]
print (z)
----------------------
z[i][j]= s[j]
IndexError: list index out of range
но все равно есть ошибка


Rodegast
> Как понять эту ошибку, ведь все индексы записаны в стиле списка,а не кортежа??
Это значит что нельзя втыкать в срез кортежи.
Разве срез пишется как

z[i,j]???
Rodegast
>
 print (z[0,1])

print(z[0][1])

> Разве срез пишется как
Срез пишется так:
[0:1]

> Если просто вывести массив то получается не такое как предполагается при двумерном массиве
Это как не получится? Или по твоему он обязан быть в столбик записан?

> Вот мои опыты с этим, и что получается на выходе:
А вот что у меня получилось на выходе:
>>> z
[['0', '1', '1', '0'], ['1', '1', '1', '1'], ['0', '0', '0', '0']]
>>> z[1]
['1', '1', '1', '1']
>>> z[1][1]
'1'
J.R.
.
omon3
J.R.
У вас же перед циклом z - пустой, а в цикле вы просите чтобы значение, которого не существует было изменено на ваше желаемое, но так не бывает, он вам и пишет что индекс списка вне диапазона - то есть нет у него адреса даже такого. Чтоб ваше выражение в цикле со списком z получилось, в него нужно положить сначала что-то, для этого есть метод append. А уж когда z-итое-житое будет иметь хоть какое-то значение, тогда его можно менять в той манере, в которой вы пытаетесь его менять.

Большое спасибо))
import numpy as np
a =  ['0110','1111','0000']
z  = np.random.randint(0, 10, [3,4])
for i in range (3):
        s=a[i]
        for j in range (4):
            z[i][j]= s[j]
print (z)        
g = z[1][1]  + z[1][2]
print (g)
---------------------------
[[0 1 1 0]
 [1 1 1 1]
 [0 0 0 0]]
2                                 #g = z[1][1]  + z[1][2]
---------------------------
# тоже самое но без библиотеки нампи
n = 3
m = 4
d= [[0] * m for i in range(n)]
print (d)
for i in range (3):
        s=a[i]
        for j in range (4):
            d[i][j]= s[j]
print (d)
p = d[1][1]  + d[1][2]
print (p)
-------------------------------
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
[['0', '1', '1', '0'], ['1', '1', '1', '1'], ['0', '0', '0', '0']]
11                                  #p = d[1][1]  + d[1][2]
-------------------------------
В итоге получилось даже лучше чем предполагалось:
Во-первых отображение массива в матрице сразу
Во-вторых каким-то магическим образом поменялся тип данных со строчки в целочисленную десятиричную систему счисления

Но в связи с этими чудесами возникают 2 вопроса - почему так:
Почему если использовать встроенную библиотеку массив записывается не в виде матрицы, а если использовать numpy, то все наоборот?
Почему массив, созданный с помощью numpy, самовольно решает какой тип данных использовать?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB