Как преобразовать массив в список
Перейти к содержимому

Как преобразовать массив в список

  • автор:

Numpy ndarray tolist() для преобразования массива в список в Python

Мы можем использовать функцию numpy ndarray tolist() для преобразования массива в список. Если массив многомерный, возвращается вложенный список. Для одномерного массива возвращается список с элементами массива.

Массив NumPy для списка

Функция tolist() не принимает никаких аргументов. Это простой способ преобразовать массив в представление списка.

1. Преобразование одномерного массива NumPy в список

import numpy as np # 1d array to list arr = np.array([1, 2, 3]) print(f'NumPy Array:\n') list1 = arr.tolist() print(f'List: ')
NumPy Array: [1 2 3] List: [1, 2, 3]

2. Преобразование многомерного массива NumPy в список

import numpy as np # 2d array to list arr = np.array([[1, 2, 3], [4, 5, 6]]) print(f'NumPy Array:\n') list1 = arr.tolist() print(f'List: ')
NumPy Array: [[1 2 3] [4 5 6]] List: [[1, 2, 3], [4, 5, 6]]

Как преобразовать массив NumPy в список в Python (с примерами)

Вы можете использовать следующий базовый синтаксис для преобразования массива NumPy в список в Python:

my_list = my_array. tolist () 

В следующих примерах показано, как использовать этот синтаксис на практике.

Пример 1. Преобразование одномерного массива в список

В следующем коде показано, как преобразовать одномерный массив NumPy в список в Python:

import numpy as np #create NumPy array my_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) #convert NumPy array to list my_list = my_array. tolist () #view list print(my_list) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #view object type type (my_list) list 

Пример 2. Преобразование многомерного массива в список

В следующем коде показано, как преобразовать многомерный массив NumPy в список в Python:

import numpy as np #create NumPy array my_array = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) #convert NumPy array to list my_list = my_array. tolist () #view list print(my_list) [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]] #view object type type (my_list) list 

Пример 3. Преобразование многомерного массива в плоский список

В следующем коде показано, как преобразовать многомерный массив NumPy в плоский список в Python:

import numpy as np #create NumPy array my_array = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) #convert NumPy array to flattened list my_list = my_array. flatten().tolist () #view list print(my_list) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #view object type type (my_list) list 

Дополнительные ресурсы

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

Как преобразовать список в массив NumPy (с примерами)

Вы можете использовать следующий базовый синтаксис для преобразования списка в Python в массив NumPy:

import numpy as np my_list = [1, 2, 3, 4, 5] my_array = np.asarray (my_list) 

В следующих примерах показано, как использовать этот синтаксис на практике.

Пример 1: преобразование списка в массив NumPy

Следующий код показывает, как преобразовать список в Python в массив NumPy:

import numpy as np #create list of values my_list = [3, 4, 4, 5, 7, 8, 12, 14, 14, 16, 19] #convert list to NumPy array my_array = np.asarray (my_list) #view NumPy array print(my_array) [ 3 4 4 5 7 8 12 14 14 16 19] #view object type type (my_array) numpy.ndarray 

Обратите внимание, что вы также можете использовать аргумент dtype , чтобы указать определенный тип данных для нового массива NumPy при выполнении преобразования:

import numpy as np #create list of values my_list = [3, 4, 4, 5, 7, 8, 12, 14, 14, 16, 19] #convert list to NumPy array my_array = np.asarray (my_list, dtype=np.float64 ) #view data type of NumPy array print(my_array. dtype ) float64 

Пример 2: преобразование списка списков в массив массивов NumPy

В следующем коде показано, как преобразовать список списков в массив массивов NumPy:

import numpy as np #create list of lists my_list_of_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] #convert list to NumPy array my_array = np.asarray (my_list_of_lists) #view NumPy array print(my_array) [[1 2 3] [4 5 6] [7 8 9]] 

Затем мы можем использовать функцию формы , чтобы быстро получить размеры нового массива массивов:

print(my_array. shape ) (3, 3) 

Это говорит нам о том, что массив массивов NumPy имеет три строки и три столбца.

Дополнительные ресурсы

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

Преобразование массива примитивов в список

В этом коротком уроке мы покажем, как преобразовать массив примитивов в список объектов соответствующего типа . Как правило, мы можем попытаться использовать автоупаковку в Java. Однако, как мы увидим в следующем разделе, наша интуиция о том, как работает автобокс, часто может быть ошибочной.

2. Проблема​

Начнем с определения проблемы. У нас есть массив примитивов ( int[] ), и мы хотим преобразовать этот массив в список ( List ). Интуитивной первой попыткой может быть:

 int[] input = new int[]1,2,3,4>;   ListInteger> output = Arrays.asList(input); 

К сожалению, это не скомпилируется из-за несовместимости типов . Мы могли бы ожидать, что автоупаковка будет работать с массивами примитивов. Однако это инстинктивное убеждение неверно.

Автоупаковка происходит только для одного элемента (например, от int до Integer ). Нет автоматического преобразования массива примитивных типов в массив их упакованных ссылочных типов (например, из int[] в Integer[] ).

Давайте начнем реализовывать несколько решений этой проблемы.

3. Итерация​

Поскольку автоупаковка работает с отдельными примитивными элементами, простое решение состоит в том, чтобы просто перебирать элементы массива и добавлять их в список один за другим :

 int[] input = new int[]1,2,3,4>;   ListInteger> output = new ArrayListInteger>();   for (int value : input)    output.add(value);   > 

Мы решили проблему, но решение довольно многословно. Это подводит нас к следующей реализации.

4. Потоки​

Начиная с Java 8 мы можем использовать Stream API . Мы можем предоставить однострочное решение, используя Stream :

 int[] input = new int[]1,2,3,4>;   ListInteger> output = Arrays.stream(input).boxed().collect(Collectors.toList()); 

В качестве альтернативы мы могли бы использовать IntStream :

 int[] input = new int[]1,2,3,4>;   ListInteger> output = IntStream.of(input).boxed().collect(Collectors.toList()); 

Это, конечно, выглядит намного красивее. Далее мы рассмотрим пару внешних библиотек.

5. Гуава​

Библиотека Guava обеспечивает решение этой проблемы . Начнем с добавления зависимости Maven :

 dependency>   groupId>com.google.guavagroupId>   artifactId>guavaartifactId>   version>31.0.1-jreversion>   type>bundletype>   dependency> 

Мы можем использовать Ints.asList() с аналогичными служебными классами для других примитивных типов:

 int[] input = new int[]1,2,3,4>;   ListInteger> output = Ints.asList(input); 

6. Апач Коммонс​

Другой библиотекой является Apache Commons Lang . Опять же, давайте добавим зависимость Maven для этой библиотеки:

 dependency>   groupId>org.apache.commonsgroupId>   artifactId>commons-lang3artifactId>   version>3.12.0version>   dependency> 

Точнее, мы используем класс ArrayUtils :

 int[] input = new int[]1,2,3,4>;   Integer[] outputBoxed = ArrayUtils.toObject(input);   ListInteger> output = Arrays.asList(outputBoxed); 

7. Заключение​

Теперь у нас есть несколько вариантов в нашем наборе инструментов для преобразования массива примитивов в список . Как мы видели, автоупаковка происходит только для отдельных элементов. В этом руководстве мы рассмотрели несколько решений для применения преобразования .

Как всегда, полный исходный код статьи доступен на GitHub .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *