2016-06-13 3 views
0

Я хочу динамически создавать массивы с именами переменных из другого массива. Скажите, что у меня есть:Python: создавать объекты массива динамически

Array1 = ['a', 'b', 'c'] 

Я хочу прямо сейчас программно создать новый массив для каждого значения в Array1 (где я не знаю, сколько значений фактически будет Array1, и я не знаю, имена, которые будут быть там), используя имена, предоставленные в Array1. Так эффективно это даст мне:

a = [] 
    b = [] 
    c = [] 
+0

Foreach над основной массив, и для каждого элемента создать новый массив? – Li357

+0

Это верно, и каждый новый массив должен принимать имя, указанное в главном массиве. – user3124181

+0

Я не уверен, что вы можете динамически создавать такие переменные, как в python. Я отношусь к этим большим экспертам. Как компромисс и, возможно, что-то более читаемое, создайте словарь массивов с a, b, c как ключи в словаре. – mba12

ответ

4

Когда вы Array1 = [a,b,c], вы теряете какую-либо информацию об именах переменных, которые вы использовали для создания экземпляра массива, поэтому я предполагаю, что вы имели в виду Array1=['a','b','c']. В Python мы обычно используем ионизатор dict для решения вопросов, связанных с этим. Используя словарь, мы можем иметь отображение 'a' в пустой list как так:

Array1 = ['a','b','c'] 
dicty = {} 
for i in Array1: 
    dicty[i] = [] 

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

+1

Да, это то, что я намеревался, я изменю свой исходный вопрос, чтобы включить одинарные кавычки в Array1 = ['a', 'b', 'c'] ... Спасибо за ваше решение, это работает. – user3124181

+1

Хорошая работа @Brian, обращаясь к путанице, сохраняя при этом решение проблемы :) +1 – slezica

0

Итак, есть несколько гипотез, которые должны быть выполнены. В основном, если Array1 имеет несколько записей, которые равны, тогда у вас не может быть разных массивов для них, например, если a == b оценивает True, тогда вы должны назначить им оба одинаковых массива. Во-вторых, почему бы не просто держать словарь с именами соответствующих массивов:

names_dict = {} ## names_dict[a] = (0,0), names_dict[b] = (1,0), ... 
new_arrays = {} 
for i in Array1.shape()[0]: 
    for j in Array1.shape()[1]: 
     names_dict[Array1[i][j]] = (i,j) 
     new_arrays[(i,j)] = np.array(...) ## whatever array you want to create goes in the "..." 

new_arrays[names_dict[a]] будет вычисляться в массиве для элемента a

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