Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как создать двухмерный массив на питоне из строки, где первое число кол-во столбцов и строк, а остальные числа данные

Елизавета Смирнова Знаток (494), на голосовании 5 лет назад
Голосование за лучший ответ
Молот Шотландцев Высший разум (300965) 5 лет назад
Не, на Питоне для начинающего задача оказалась не самой простой. Но зато удалось решить на Джаваскрипте. Имеем строку '34123456789012'. А на выходе имеем двумерный массив из 3 подмассивов по 4 элемента.
var b = [];
var str = '34123456789012';
var arr = str.split('');
console.log(arr);
var i1 = arr[0];
var i2 = arr[1];
console.log(i1);
console.log(i2);
var arr = arr.splice(2);
console.log(arr);
for (var i = 0; i <= i1; i++) {
var a = arr.splice(0, i2);
console.log(' a is ' + a)
if (Array.isArray(a)) {
console.log('yes, a is array');
} else {
console.log('no, a is not array');
}
b.push(a);
};
console.log('B is ' + b);
console.log(b[0] + '//' + b[1]+ '//' + b[2]);
Молот ШотландцевВысший разум (300965) 5 лет назад
Ну, только в цикле for (var i = 0; i < i1; i++)
Молот ШотландцевВысший разум (300965) 5 лет назад
Ура, справился и на Питоне
Aleks Nots Просветленный (22647) 5 лет назад
Без проверок правильности
s = '2 3 11 22 33 44 55 66'
L = []
k = 0
for n in s.split():
~~~~L.append(int(n))
~~~~
col = L[k]
k += 1
row = L[k]
k += 1
A = []
for i in range(row):
~~~~B = []
~~~~for j in range(col):
~~~~~~~~B.append(L[k])
~~~~~~~~k += 1
~~~~A.append(B)

for a in A:
~~~~print(a)

PS
Первоначальный вариант заменил. Тот тоже вроде бы работал, но этот мне больше нравится.

----Первоначальный вариант ----------
s = '2 3 11 22 33 44 55 66'
L = []
for n in s.split():
~~~~L.append(int(n))
col = L.pop(0)
row = L.pop(0)
A = []
for i in range(row):
~~~~B = []
~~~~for j in range(col):
~~~~~~~~B.append(L.pop(0))
~~~~A.append(B)

for a in A:
~~~~print(a)
Похожие вопросы