2016-04-15 3 views
-3

Я пытаюсь заставить многомерный массив работать, где пользовательская строка заполняется в ячейке. Я искал путей обновления пользовательских значений в многомерном массивеКак заменить значения в многомерном массиве?

def createMultiArray(self,usrstrng,Itmval): 
    #creates a multidimensional array, where usrstrng=user input, Itmval=width   
    ArrayMulti=[[" " for x in range(Itmval)]for x in range(Itmval)] 

    # need to update user values, therefore accessing index to update values. 
    for row in ArrayMulti: 
     for index in range(len(row)): 

      for Usrchr in usrstrng: 
       row[index]= Usrchr 
    print "This is updated array>>>",ArrayMulti 

Входной

funs 

выходной ток, который я получаю

This is updated array>>> [['s', 's', 's'], ['s', 's', 's'], ['s', 's', 's']] 

то, что я ищу

This is updated array>>> [['f', 'u', 'n'], ['s', ' ', ' '], [' ', ' ', ' ']] 

Заготовка может быть заполнена *

+0

Почему вы зацикливаете на 'usrstrng', чтобы заменить символ пробела? – BallpointBen

+0

@James я пытался заменить каждое значение ячейки каждым символом строки –

+0

Но как только вы замените, в строке не будет больше пробелов, поэтому последующие вызовы 'replace' ничего не сделают. – BallpointBen

ответ

0

string.replace не работает, так как это не влияет на исходное значение.

>>> test = "hallo" 
>>> test.replace("a", " ") 
'h llo' 
>>> test 
'hallo' 

Вместо этого вы должны получить доступ к списку с помощью индексов:

for row in ArrayMulti: 
    for index in range(len(row)): 
     row[index] = "a" 

Если вы предоставляете более точный вопрос и добавить вывод, который вы хотите достичь на вопрос, который я могу дать вам более точный ответ.

Я слом предыдущее решение, так как это было не то, что вы хотели

def UserMultiArray(usrstrng, Itmval): 
    ArrayMulti=[[" " for x in range(Itmval)] for x in range(Itmval)] 

    for index, char in enumerate(usrstrng): 
     ArrayMulti[index//Itmval][index%Itmval] = char 
    return ArrayMulti 


>>> stack.UserMultiArray("funs", 3) 
[['f', 'u', 'n'], ['s', ' ', ' '], [' ', ' ', ' ']] 

Этот маленький трюк использует целочисленное деление:

[0, 1, 2, 3 , 4] // 3 -> 0, 0, 0, 1, 1

и по модулю оператора (https://en.wikipedia.org/wiki/Modulo_operation):

[0, 1, 2, 3, 4]% 3 -> 0, 1, 2, 0, 1

+0

Arraymulti - многомерный массив, в котором я инициализировал его с помощью «» ...теперь я использую цикл for, чтобы поместить каждое значение строки в следующую ячейку –

+0

Аргенты были UserMultiArray («hallo», 5) – webbertee

+0

@dbliss благодаря обновлению краткое описание кода можно увидеть по адресу http: // stackoverflow.com/questions/36665750/updating-values-in-multidimensional-array –

0

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

offset = 0 
for row in ArrayMulti: 
    if len(usrstrng) > offset 
     for index in range(len(row)): 
      if len(usrstrng) == offset + index 
       break 
      row[index] = usrstrng[offset + index] 
    else: 
     break 
    offset += len(row) 

EDIT

вы также можете сделать это

[[usrstrng[i*Itmval + j] if len(urstring) > i*Itmval + j else ' ' for j in range(Itmval)] for i range(Itmval)] 
Смежные вопросы