Список списков для двухмерного массива в Python

У меня есть список списков в Python, который содержит смесь значений, некоторые из которых являются строками, а некоторые являются кортежами.

data = [[0,1,2],["a", "b", "c"]]

Мне интересно, есть ли способ легко преобразовать любой список длины в 2D-массив без использования Numpy. Я работаю с System.Array, потому что это необходимый формат. Я понимаю, что могу создать новый экземпляр массива, а затем использовать циклы for для записи в него всех данных из списка. Мне было просто любопытно, есть ли хороший Pythonic способ сделать это.

x = len(data)
y = len(data[0])
arr = Array.CreateInstance(object, x, y)

Тогда я могу просмотреть свои данные и установить значения arr правильно?

arr = Array.CreateInstance(object, x, y)
for i in range(0, len(data),1):
    for j in range(0,len(data[0]), 1):
        arr.SetValue(data[i][j], i,j)

Я хочу, чтобы избежать подобных циклов, если это возможно. Спасибо,

Ps. Это для Excel Interop, где я могу установить весь диапазон в Excel, установив его равным массиву. Вот почему я хочу преобразовать список в массив. Спасибо,

Что меня интересует, так это то, что Array является типизированным объектом, возможно ли установить его составляющие либо в строку, либо в целое число? Я думаю, что я мог бы быть ограничен только одним. Правильно? Если да, есть ли другой тип данных, который я могу использовать? Установлено ли значение Arrayobject, что я могу комбинировать str / int внутри него?

Также я думал, что смогу использовать это:

arr= Array[Array[object]](map(object, data))

но это выдает ошибку. Есть идеи?

1 ответ

Вы можете использовать Array.CreateInstance для создания одиночного или многомерного массива. Поскольку метод Array.CreateInstance принимает значение "Тип", вы указываете любой тип, который вам нужен. Например:

// gives you an array of string
myArrayOfString = Array.CreateInstance(String, 3)

// gives you an array of integer
myArrayOfInteger = Array.CreateInstance(Int32, 3)

// gives you a multidimensional array of strings and integer
myArrayOfStringAndInteger = [myArrayOfString, myArrayOfInteger]

Надеюсь это поможет. Также см. Веб-сайт msdn для примеров того, как использовать Array.CreateInstance.

Другие вопросы по тегам