Уведомления

Группа в Telegram: @pythonsu

#1 Июль 21, 2015 01:12:39

omon3
Зарегистрирован: 2015-07-16
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

запись одномерного массива в двумерный

(питон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])

ОГРОМНАЯ ПРОСЬБА по возможности только модернизировать мой гавнокод и немного объяснить, ибо синтаксис языка плохо знаю и всякие упрощения не идут на пользу.

Отредактировано omon3 (Июль 21, 2015 14:11:21)

Офлайн

#2 Июль 21, 2015 03:07:36

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

запись одномерного массива в двумерный

omon3
Ок . тогда первое что вам надо освоить это то что на ВСЕХ вменяемых форумах, код вставляется в специальные теги. Освоите это - можно будит переоформить должным образом топик и помогать вам дальше.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Июль 21, 2015 09:23:16

omon3
Зарегистрирован: 2015-07-16
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

запись одномерного массива в двумерный

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])

Офлайн

#4 Июль 21, 2015 10:34:45

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

запись одномерного массива в двумерный

a = ['0110','1111','0000']
z = [ list(x) for x in a ]
> ОГРОМНАЯ ПРОСЬБА по возможности только модернизировать мой гавнокод и немного объяснить, ибо синтаксис языка плохо знаю и всякие упрощения не идут на пользу.
a = ['0110','1111','0000']
z = []
for x in a:
    z.append(list(x))



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июль 21, 2015 10:39:53)

Офлайн

#5 Июль 21, 2015 14:07:42

omon3
Зарегистрирован: 2015-07-16
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

запись одномерного массива в двумерный

Мне нужно чтобы каждая цифра массива А'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])        

Отредактировано omon3 (Июль 21, 2015 14:10:10)

Офлайн

#6 Июль 21, 2015 14:43:52

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

запись одномерного массива в двумерный

> Мне нужно чтобы каждая цифра массива А'0110','1111','0000' …..
Во блин…. Ты бы хоть для приличия запустил то что я тебе написал, а потом бы возмущался.

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



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Июль 21, 2015 16:16:29

omon3
Зарегистрирован: 2015-07-16
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

запись одномерного массива в двумерный

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]???

Офлайн

#8 Июль 21, 2015 16:23:02

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

запись одномерного массива в двумерный

>

 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'



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июль 21, 2015 16:31:58)

Офлайн

#9 Июль 21, 2015 16:55:41

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

запись одномерного массива в двумерный

.

Отредактировано J.R. (Фев. 27, 2016 15:53:42)

Офлайн

#10 Июль 21, 2015 19:29:34

omon3
Зарегистрирован: 2015-07-16
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

запись одномерного массива в двумерный

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, самовольно решает какой тип данных использовать?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version