- Python How to make array in array?
- 4 Answers 4
- Массивы Python
- Создание массива
- Многомерный массив
- Операции с массивами
- Обход массива с использованием цикла for
- Обход многомерного массива
- Добавление
- Определение размера
- Срез
- Функция pop
- Методы массива
- Модуль array
- Типы элементов массива
- Appending two arrays together in Python
- 4 Answers 4
- Linked
- Related
- Hot Network Questions
- Subscribe to RSS
Python How to make array in array?
I have a numpy array Z1, Z2, Z3:
Z1 = [1,2,3]
Z2 = [4,5]
Z3 = [6,7,8,9]
I want new numpy array Z that have Z1, Z2, Z3 as array like:
Z = [[1,2,3],[4,5],[6,7,8,9]
print(type(Z),type(Z[0]))
>>>
I used np.append, hstack, vstack, insert, concatenate . but all I failed.
There is only 2 case:
Z = [1,2,3,4,5,6,7,8,9]
or ERROR
so I made a list Z first, and append list Z1, Z2, Z3 and then convert list Z into numpy array Z.
BUT
Z = [[1,2,3],[4,5],[6,7,8,9]]
print(type(Z),type(Z[0]))
>>> I want to do not use ‘while’ or ‘for’. Help me please..
4 Answers 4
import numpy as np Z1 = [1,2,3] Z2 = [4,5] Z3 = [6,7,8,9] Z = np.array([Z1, Z2, Z3]) print(Z) print(type(Z))
This will convert your list of lists into an numpy array
That’s just an array of Python objects though: note that type(Z[0]) returns
First, Z is a list of lists:
This is an array of lists — note the dtype. But keep in mind that np.array([[1,2,3],[4,5,6]]) will produce a 2d array of dtype int.
In [34]: np.array(Z) Out[34]: array([[1, 2, 3], [4, 5], [6, 7, 8, 9]], dtype=object)
The surest way of creating an array of object dtype, and given shape is to initialize it, and then fill it:
In [35]: out = np.zeros((3,), dtype=object) In [36]: out[. ] = Z In [37]: out Out[37]: array([[1, 2, 3], [4, 5], [6, 7, 8, 9]], dtype=object)
Again this is an array of lists. To make an array of arrays, we first have to make a list of arrays:
In [38]: out[. ] = [np.array(x) for x in Z] In [39]: out Out[39]: array([array([1, 2, 3]), array([4, 5]), array([6, 7, 8, 9])], dtype=object)
Object arrays are awkward beasts, not quite lists and not quite (regular) arrays.
Массивы Python
Основы
В Питоне нет структуры данных, полностью соответствующей массиву. Однако, есть списки, которые являются их надмножеством, то есть это те же массивы, но с расширенным функционалом. Эти структуры удобнее в использовании, но цена такого удобства, как всегда, производительность и потребляемые ресурсы. И массив, и список – это упорядоченные коллекции, но разница между ними заключается в том, что классический массив должен содержать элементы только одного типа, а список Python может содержать любые элементы.
shapito_list = [1, 'qwerty', 4/3, [345, ['a', ]]] print(shapito_list) # Вывод: [1, 'qwerty', 1.3333333333333333, [345, ['a', ]]]Создание массива
Существует несколько способ создать массив. Ниже приведены примеры как это можно сделать.
можно_так = [1, 2, 3, 4, 5] можно_так_2 = list('итерируемый объект') а_можно_и_так = [i for i in range(5)] print('можно_так:', можно_так) print('можно_так_2:', можно_так_2) print('а_можно_и_так:', а_можно_и_так) print('можно_так[0]:', можно_так[0]) print('а_можно_и_так[3]:', а_можно_и_так[3]) # Вывод: можно_так: [1, 2, 3, 4, 5] можно_так_2: ['и', 'т', 'е', 'р', 'и', 'р', 'у', 'е', 'м', 'ы', 'й', ' ', 'о', 'б', 'ъ', 'е', 'к', 'т'] а_можно_и_так: [0, 1, 2, 3, 4] можно_так[0]: 1 а_можно_и_так[3]: 3Многомерный массив
Двухмерный массив в Python можно объявить следующим образом.
example_array = [[-1, 0, 0, 1], [2, 3, 5, 8]] print(example_array[0]) print(example_array[1]) print(example_array[0][3]) # Вывод: [-1, 0, 0, 1] [2, 3, 5, 8] 1example_array = [[[-1, 0], [0, 1]], [[2, 3], [5, 8]]] print(example_array[0]) print(example_array[1]) print(example_array[0][1]) print(example_array[0][1][0]) # Вывод: [[-1, 0], [0, 1]] [[2, 3], [5, 8]] [0, 1] 0Операции с массивами
Давайте теперь рассмотрим операции, которые Пайтон позволяет выполнять над массивами.
Обход массива с использованием цикла for
Мы можем использовать цикл for для обхода элементов массива.
example_array = [1, 2, 3] for i in range(len(example_array)): print(example_array[i]) # Вывод: 1 2 3Здесь представлен подход, свойственный большинству языков программирования. В Python же есть свой, более удобный вариант.
example_array = [1, 2, 3] for i in example_array: print(i) # Вывод: 1 2 3Обход многомерного массива
Для того чтоб получить элементы многомерного массива придётся использовать вложенные циклы.
example_array = [[1, 2], [3, 4]] for i in example_array: for x in i: print(x) # Вывод: 1 2 3 4Добавление
Мы можем использовать функцию insert() для вставки элемента по указанному индексу. Элементы из указанного индекса сдвигаются вправо на одну позицию.
example_array = [[1, 2], [3, 4]] example_array.insert(0, -1) example_array.insert(2, [-1, 13, 64]) print(example_array) # Вывод: [-1, [1, 2], [-1, 13, 64], [3, 4]]example_array = [[1, 2], [3, 4]] example_array.append(-1) example_array.append([-1, 13, 64]) print(example_array) # Вывод: [[1, 2], [3, 4], -1, [-1, 13, 64]]example_array = [1, 2, 3, 4] example_array.extend([5, 6]) print(example_array) # Вывод: [1, 2, 3, 4, 5, 6]Определение размера
Используйте метод len() чтобы вернуть длину массива (число элементов массива).
Не стоит путать размер массива с его размерностью!example_array = [[1, 2], [3, 4]] print('Размер массива:', len(example_array)) example_array.append(-1) print('Размер массива:', len(example_array)) example_array.append([-1, 13, 64]) print('Размер массива:', len(example_array)) # Вывод: Размер массива: 2 Размер массива: 3 Размер массива: 4Поскольку индексация элементов начинается с нуля, длина массива всегда на единицу больше, чем индекс последнего элемента.
example_array = [[1, 2], [3, 4]] print('Равна ли длина массива номеру последнего элемента + 1?', len(example_array) is (example_array.index(example_array[-1]) + 1)) example_array.append(-1) print('Увеличили размер массива.') print('Равна ли теперь длина массива номеру последнего элемента + 1?', len(example_array) is (example_array.index(example_array[-1]) + 1)) # Вывод: Равна ли длина массива номеру последнего элемента + 1? True Увеличили размер массива. Равна ли теперь длина массива номеру последнего элемента + 1? TrueНебольшое пояснение: метод списка .index() возвращает индекс элемента, значение которого совпадает с тем, которое передали методу. Здесь мы передаём значение последнего элемента и, таким образом, получаем индекс последнего элемента. Будьте осторожны: если в списке есть повторяющиеся значения, этот приём не сработает!
Срез
Срез Python предоставляет особый способ создания массива из другого массива.
example_array = [[1, 2], [3, 4]] print(example_array[::-1]) print(example_array[1:]) print(example_array[0][:-1]) # Вывод: [[3, 4], [1, 2]] [[3, 4]] [1]Функция pop
В Python удалить ненужные элементы из массива можно при помощи метода pop, аргументом которого является индекс ячейки. Как и в случае с добавлением нового элемента, метод необходимо вызвать через ранее созданный объект.
example_array = [1, 2, 6, 3, 4] print(example_array.pop(4)) print(example_array) # Вывод: 4 [1, 2, 6, 3]После выполнения данной операции содержимое массива сдвигается так, чтобы количество доступных ячеек памяти совпадало с текущим количеством элементов.
Методы массива
В Python есть набор встроенных методов, которые вы можете использовать при работе с list.
Метод | Значение |
append() | Добавляет элементы в конец списка |
clear() | Удаляет все элементы в списке |
copy() | Возвращает копию списка |
count() | Возвращает число элементов с определенным значением |
extend() | Добавляет элементы списка в конец текущего списка |
index() | Возвращает индекс первого элемента с определенным значением |
insert() | Добавляет элемент в определенную позицию |
pop() | Удаляет элемент по индексу |
remove() | Убирает элементы по значению |
reverse() | Разворачивает порядок в списке |
sort() | Сортирует список |
Модуль array
Если Вам всё-таки нужен именно классический массив, вы можете использовать встроенный модуль array. Он почти не отличается от структуры list, за исключением, пожалуй, объявления.
Вот небольшая демонстрация:
import array example_array = array.array('i', [1, 2, 6, 3, 4]) # превый аргумент указывает на тип элементов. i означает integer example_array.insert(0, -1) print('После вставки:', example_array) example_array.append(-1) print('После добавления в конец:', example_array) example_array.extend([5, 6]) print('После объединения со списком:', example_array) print('Удалён элемент:', example_array.pop(4)) print('После удаления элемента:', example_array) print('Срез:', example_array[0:4]) # Вывод: После вставки: array('i', [-1, 1, 2, 6, 3, 4]) После добавления в конец: array('i', [-1, 1, 2, 6, 3, 4, -1]) После объединения со списком: array('i', [-1, 1, 2, 6, 3, 4, -1, 5, 6]) Удалён элемент: 3 После удаления элемента: array('i', [-1, 1, 2, 6, 4, -1, 5, 6]) Срез: array('i', [-1, 1, 2, 6])Типы элементов массива
Элементы массива в модуле array могут быть следующих типов:
Код типа | Тип в C | Тип в python |
‘b’ | signed char | int |
‘B’ | unsigned char | int |
‘h’ | signed short | int |
‘H’ | unsigned short | int |
‘i’ | signed int | int |
‘I’ | unsigned int | int |
‘l’ | signed long | int |
‘L’ | unsigned long | int |
‘q’ | signed long long | int |
‘Q’ | unsigned long long | int |
‘f’ | float | float |
‘d’ | double | float |
Как Вы можете видеть, со строками модуль не работает.
Appending two arrays together in Python
I've been working in Python with an array which contains a one-dimensional list of values. I have until now been using the array.append(value) function to add values to the array one at a time. Now, I would like to add all the values from another array to the main array instead. In other words I don't want to add single values one at a time. The secondary array collects ten values, and when these are collected, they are all transfered to the main array. The problem is, I can't simply use the code 'array.append(other_array)', as I get the following error:
unsupported operand type(s) for +: 'int' and 'list'
4 Answers 4
Lists can be added together:
>>> a = [1,2,3,4] >>> b = [5,6,7,8] >>> a+b [1, 2, 3, 4, 5, 6, 7, 8]
and one can be easily added to the end of another:
You are looking for array.extend() method. append() only appends a single element to the array.
Array (as in numpy.array or array module) or list ? Because given your error message, it seems the later.
Anyway, you can use the += operator, that should be overridden for most container types, but the operands must be of the same (compound) type.
Usually, if you want to expand a structure to the right ( axis=1 ) or at the bottom ( axis=0 ), you should have a look at the numpy.concatenate() function, see Concatenate a NumPy array to another NumPy array.
np.concatenate(arr1, arr2, axis=0)
is probably what is needed here, adding a new row in a nested array.
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.7.25.43544
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.