2016-08-20 4 views
1

Как я могу вставить каждый элемент списка символов в матрицу (MXN) У меня есть этот код в питонеКак вставить каждый элемент списка символов в матрицу в питоне

key = raw_input('Key: ') 
text = raw_input('Text: ') 
text_c = list(text) 
while ' ' in text_c: 
    text_c.remove(' ')  
columns = len(key)    
rows = int(math.ceil(float(len(text_c))/float(len(key)))) 
matrix = [] 
for i in range(rows): 
    matrix.append([]) 
    for j in range(columns): 
     matrix[i].append(None) 

Теперь я хотите вставить каждый элемент из text_c в матрицу. Независимо от того, что эта матрица не заполняется. Как это сделать. Благодаря (извините за мой плохой английский)

+3

Не могли бы вы предоставить образец для входных и выходных фрагмент кода и сделать код полностью работоспособным? Например, 'tabla' не определен правильно в коде, который вы указали. – albert

+0

Извините, tabla - это матрица. Я уже исправляю его –

+0

А как насчет выборочного ввода/вывода? – albert

ответ

1

Вы можете добиться этого путем объединения некоторых списковых следующим образом:

number_columns = 6 
sample_string = 'abcdefghijklmnopqrstuvwxyzabcdefgh' 

l = [list(sample_string[i:i+number_columns]) for i in range(0, len(sample_string), number_columns)] 
matrix = [s if len(s) == number_columns else s+[None]*(number_columns-len(s)) for s in l] 

дает для matrix:

[['a', 'b', 'c', 'd', 'e', 'f'], 
['g', 'h', 'i', 'j', 'k', 'l'], 
['m', 'n', 'o', 'p', 'q', 'r'], 
['s', 't', 'u', 'v', 'w', 'x'], 
['y', 'z', 'a', 'b', 'c', 'd'], 
['e', 'f', 'g', 'h', None, None]] 

Прежде всего нарежьте sample_string к подстрокам нужной длины (количество столбцов), которые преобразуются в списки после нарезки.

В примере кода я предоставил sample_string не нацело на данном number_colums смысле, что последний список подстроки efgh не имеет требуемую длину number_columns. Чтобы получить это исправление, нам нужно проверить, соответствует ли длина каждого списка. Если нет, мы добавляем необходимое количество элементов None.

Для того, чтобы избавиться от любых пространств, которые мы должны расширить код,

sample_string = sample_string.replace(' ', '') 

, которые заменили бы пробелы с пустой строкой. Так

number_columns = 6 
sample_string = 'this is a sample string' 

sample_string = sample_string.replace(' ', '') 

l = [list(sample_string[i:i+number_columns]) for i in range(0, len(sample_string), number_columns)] 
matrix = [s if len(s) == number_columns else s+[None]*(number_columns-len(s)) for s in l] 

приведет к

[['t', 'h', 'i', 's', 'i', 's'], 
['a', 's', 'a', 'm', 'p', 'l'], 
['e', 's', 't', 'r', 'i', 'n'], 
['g', None, None, None, None, None]] 
+0

Большое спасибо. –

+0

Если это решило вашу проблему, пожалуйста, примите мой ответ, чтобы пометить ваш вопрос как решение. – albert

+0

Сделано! Спасибо, я новичок на сайте –

Смежные вопросы