Python NET инициализирует зубчатый массив - PullRequest
0 голосов
/ 24 января 2019

Я хотел бы создать неровный массив .NET из Python, используя пакеты pythonnet. Для одномерного массива я могу сделать это так:

import clr
from System import Array
a = Array[int]([1, 2, 3])

Но как я могу сделать это для зубчатого массива? Итак, давайте предположим, что у меня в python следующий список списка:

[[1, 2, 3], [4, 5, 6]]

В C # я бы сделал это так:

int[][] a = new int[][] { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6 }};

1 Ответ

0 голосов
/ 24 января 2019

В Python это можно сделать так:

b = Array[Array[int]]([Array[int]([1,2,3]), Array[int]([4,5,6])])

или если вы определяете вспомогательную функцию:

def asnetarray(x, defaulttype):
    if type(x) is list:
        if any([type(xi) is list for xi in x]):
            # Array of array
            return asnetarray([asnetarray(xi, defaulttype) for xi in x], defaulttype)
        elif x:
            # Array
            return Array[type(x[1])](x)
        else:
            # Empty array
            return Array[defaulttype]([])
    else:
        # Single element
        return Array[type(x)]([x])

тогда это можно использовать как:

# int[][]
b = asnetarray([[1, 2], [3, 4]], int)
# int[][][]
c = asnetarray([[[1, 2], [3, 4]], [[5, 6], [7, 8]]], int)
...