Правильное добавление элемента в массив Python
Есть у меня переменная, которую я инкремирую (так же говорят?), а потом добавляю в массив. Делаю это несколько раз, в цикле. В питон я пришёл из си и привык, что если я не говорю, что передаю элемент по ссылке, то я не передаю его по ссылке. Сейчас же, в питоне, все элементы моего списка всегда одинаковы и соответствуют этой переменной. В документации копался, признаю, что плохо, ответ должен быть не глубоко, но будет круто, если кто-то ответит быстрее, чем я докопаюсь. Часть кода:
array = [] for i in range(3): array.append(Pose) Pose.pos.x += (width * 0.001)
На выходе получаю array состоящих из 3-х одинаковых элементов З.Ы. «Pose» — это так надо ,это не я не грамотный.
Отслеживать
user176262
задан 7 ноя 2018 в 20:35
Михаил Краев Михаил Краев
144 1 1 золотой знак 1 1 серебряный знак 9 9 бронзовых знаков
Это не три одинаковых элемента, это один и тот же элемент, добавленный три раза.
– user176262
7 ноя 2018 в 20:43
@Igor , да я понимаю. Но я добавляю элемент, потом изменяю и добавляю снова. И ожидаю, что первый элемент при это не изменится. Списки же не только из вручную дабавленных элементов создаются? Мне же не нужно 9469628823 запасных переменных делать, я же не знаю заранее размер массива.
7 ноя 2018 в 20:47
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Михаил, если на листке бумаги написать три разных строчки, то он не превратиться в три листка бумаги, это будет всё тот же один лист бумаги.
Чтобы работать с тремя разными объектами, нужно как-то создать три разных объекта.
Как это сделать — зависит от того, что из себя представляет ваш Pose .
В питоне с большой буквы записывают название класса, что несколько обескураживает, поскольку те действия, которые вы пытаетесь делать с Pose как-то не очень осмысленны для класса.
Возможно, вам нужно сначала инстанцировать отдельные экземпляры класса, и работать уже с ними:
array = [] for i in range(3): p = Pose() array.append(p) p.pos.x += (width * 0.001)
Если же у вас Pose вопреки заглавной букве итак уже является инстанцированным экземпляром класса, то вам нужно как-то скопировать его, или инстанцировать ещё два отдельных экземпляра. Чтобы в точности сказать, как это лучше сделать, мне нужно видеть определение класса, экземпляром которого является Pose . Если вы приведёте его, я смогу лучше вам помочь.
Добавление элементов в массив в Python
В Python нет встроенного типа данных “массив”, но есть модули, которые позволяют работать с массивами. В этой статье мы рассмотрим, как добавлять данные в массив с помощью модулей array и NumPy. Модуль array полезен, когда нужно создать массив целых чисел и чисел с плавающей точкой. А модуль NumPy пригодится, когда вам нужно выполнить математические операции с массивом.
Во многих случаях создать массив вы можете с помощью List, поскольку он обеспечивает гибкость (например смешанные типы данных) и по-прежнему обладает всеми характеристиками массива.
Примечание: в массив можно добавлять только элементы одного типа данных. Соответственно, объединять можно только два массива с одинаковым типом данных.
Добавление элементов в массив
С помощью модуля array можно объединять массивы при помощи оператора + и добавлять элементы в массив методами append(), extend() и insert().
- Оператор +, x + y: возвращает новый массив с элементами из двух массивов.
- append(x): добавляет один элемент в конец массива.
- extend(iterable): добавляет список, массив или другую итерабельную переменную в конец массива.
- insert(i, x): вставляет элемент перед заданным индексом массива.
В следующем примере показано, как создать новый объект массива путем объединения двух других массивов:
import array # create array objects, of type integer arr1 = array.array('i', [1, 2, 3]) arr2 = array.array('i', [4, 5, 6]) # print the arrays print("arr1 is:", arr1) print("arr2 is:", arr2) # create a new array that contains all of the elements of both arrays # and print the result arr3 = arr1 + arr2 print("After arr3 = arr1 + arr2, arr3 is:", arr3)
Получим следующий вывод:
arr1 is: array('i', [1, 2, 3]) arr2 is: array('i', [4, 5, 6]) After arr3 = arr1 + arr2, arr3 is: array('i', [1, 2, 3, 4, 5, 6])
В предыдущем примере создается новый массив, в котором содержатся все элементы заданных массивов.
А в следующем примере показано, как добавлять данные в массив с помощью методов append(), extend() и insert():
import array # create array objects, of type integer arr1 = array.array('i', [1, 2, 3]) arr2 = array.array('i', [4, 5, 6]) # print the arrays print("arr1 is:", arr1) print("arr2 is:", arr2) # append an integer to an array and print the result arr1.append(4) print("\nAfter arr1.append(4), arr1 is:", arr1) # extend an array by appending another array of the same type # and print the result arr1.extend(arr2) print("\nAfter arr1.extend(arr2), arr1 is:", arr1) # insert an integer before index position 0 and print the result arr1.insert(0, 10) print("\nAfter arr1.insert(0, 10), arr1 is:", arr1)
Получаем следующий вывод:
arr1 is: array('i', [1, 2, 3]) arr2 is: array('i', [4, 5, 6]) After arr1.append(4), arr1 is: array('i', [1, 2, 3, 4]) After arr1.extend(arr2), arr1 is: array('i', [1, 2, 3, 4, 4, 5, 6]) After arr1.insert(0, 10), arr1 is: array('i', [10, 1, 2, 3, 4, 4, 5, 6])
В предыдущем примере каждый метод вызывается на объекте массива arr1 и изменяет исходный объект.
Добавление элементов в массив NumPy
С модулем NumPy вы можете использовать функции NumPy append() и insert() для добавления элементов в массив.
- numpy.append(arr, values, axis=None): добавляет значения или массив в конец копии arr. Если параметр axis не указан, то по умолчанию используется значение None, что означает, что arr и values выравниваются перед операцией append.
- numpy.insert(arr, obj, values, axis=None): вставляет значения или массив перед индексом (obj) вдоль оси. Если параметр axis не указан, то по умолчанию используется значение None, что означает, что перед операцией insert выравнивается только arr.
numpy.append() использует функцию numpy.concatenate() в фоновом режиме. Метод numpy.concatenate() объединяет последовательность массивов вдоль указанной оси. Узнать больше о работе с массивами вы можете в документации NumPy.
Примечание: для тестирования примеров кода в этом разделе необходимо установить NumPy .
Примеры на этом этапе используют двумерные (2D) массивы, чтобы показать, как функции обрабатывают массивы в зависимости от значения axis.
Добавление в массив с помощью numpy.append()
Массивы NumPy можно описать по размеру и форме. При добавлении значений или массивов в многомерные массивы добавляемый массив или значения должны иметь одинаковую форму, за исключением указанной оси.
Чтобы понять форму 2D массива, рассмотрим строки и столбцы. array([[1, 2], [3, 4]]) имеет форму 2, 2, эквивалентную 2 строкам и 2 столбцам; array([[10, 20, 30], [40, 50, 60]] ) имеет форму 2, 3, эквивалентную 2 строкам и 3 столбцам.
Протестируйте эту концепцию с помощью интерактивной консоли Python.
Сначала импортируйте модуль NumPy, затем создайте несколько массивов и проверьте их форму.
Импортируйте NumPy, затем создайте и выведите np_arr1:
import numpy as np np_arr1 = np.array([[1, 2], [3, 4]]) print(np_arr1)
Получим следующий вывод:
[[1 2] [3 4]]
Проверьте форму np_arr1:
np_arr1.shape (2, 2)
Создайте и выведите ещё один массив, np_arr2:
np_arr2 = np.array([[10, 20, 30], [40, 50, 60]]) print(np_arr2) [[10 20 30] [40 50 60]]
Проверьте форму np_arr2:
np_arr2.shape (2, 3)
Затем попробуйте добавить массивы по разным осям. Вы можете добавить массив формы 2, 3 к массиву формы 2, 2 вдоль оси 1, но не вдоль оси 0.
Добавьте np_arr2 к np_arr1 вдоль axis 0 или по строкам:
np.append(np_arr1, np_arr2, axis=0)
Вы получите ошибку ValueError:
Traceback (most recent call last): File "", line 1, in File "", line 5, in append File "/Users/digitalocean/opt/anaconda3/lib/python3.9/site-packages/numpy/lib/function_base.py", line 4817, in append return concatenate((arr, values), axis=axis) File "", line 5, in concatenate ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 2 and the array at index 1 has size 3
Выполнить добавление массива с тремя столбцами в массив с двумя столбцами невозможно.
Вы можете добавить массив np_arr2 к np_arr1 вдоль оси 1, то есть по столбцам:
np.append(np_arr1, np_arr2, axis=1)
Вывод будет следующим:
array([[ 1, 2, 10, 20, 30], [ 3, 4, 40, 50, 60]])
Вы можете добавить массив со столбцами высотой в две строки к другому массиву со столбцами высотой в две строки.
В следующем примере показано, как добавлять элементы в массив NumPy с помощью функции numpy.append():
import numpy as np # create 2D array objects (integers) np_arr1 = np.array([[1, 2], [3, 4]]) np_arr2 = np.array([[10, 20], [30, 40]]) # print the arrays print("np_arr1 is:\n", np_arr1) print("np_arr2 is:\n", np_arr2) # append an array to the end of another array and print the result # both arrays are flattened before appending append_axis_none = np.append(np_arr1, np_arr2, axis=None) print("append_axis_none is:\n", append_axis_none) # append an array to the end of another array along axis 0 (append rows) # and print the result append_axis_0 = np.append(np_arr1, np_arr2, axis=0) print("append_axis_0 is:\n", append_axis_0) # append an array to the end of another array along axis 1 (append columns) # and print the result append_axis_1 = np.append(np_arr1, np_arr2, axis=1) print("append_axis_1 is:\n", append_axis_1)
Получаем следующий вывод:
np_arr1 is: [[1 2] [3 4]] np_arr2 is: [[10 20] [30 40]] append_axis_none is: [ 1 2 3 4 10 20 30 40] append_axis_0 is: [[ 1 2] [ 3 4] [10 20] [30 40]] append_axis_1 is: [[ 1 2 10 20] [ 3 4 30 40]]
Предыдущий пример демонстрирует работу функции numpy.append() для каждой оси 2D-массива и как изменяется форма полученного массива. Если ось равна 0, массив дополняется строками. Если ось равна 1, массив дополняется столбцами.
Добавление элементов в массив с помощью numpy.insert()
Функция numpy.insert() вставляет массив или значения в другой массив перед указанным индексом вдоль оси и возвращает новый массив.
В отличие от функции numpy.append(), если ось не указана или указана как None, то функция numpy.insert() сглаживает только первый массив и не сглаживает значения или массив, которые нужно вставить. Если вы попытаетесь вставить 2D-массив в другой 2D-массив без указания оси, то вы получите ошибку ValueError.
В следующем примере показано, как вставлять элементы в массив с помощью функции numpy.insert():
import numpy as np # create array objects (integers) np_arr1 = np.array([[1, 2], [4, 5]]) np_arr2 = np.array([[10, 20], [30, 40]]) np_arr3 = np.array([100, 200, 300]) # print the arrays print("np_arr1 is:\n", np_arr1) print("np_arr2 is:\n", np_arr2) print("np_arr3 is:\n", np_arr3) # insert a 1D array into a 2D array and then print the result # the original array is flattened before insertion insert_axis_none = np.insert(np_arr1, 1, np_arr3, axis=None) print("insert_axis_none is:\n", insert_axis_none) # insert an array into another array by row # and print the result insert_axis_0 = np.insert(np_arr1, 1, np_arr2, axis=0) print("insert_axis_0 is:\n", insert_axis_0) # insert an array into another array by column # and print the result insert_axis_1 = np.insert(np_arr1, 1, np_arr2, axis=1) print("insert_axis_1 is:\n", insert_axis_1)
Вывод будет следующим:
np_arr1 is: [[1 2] [4 5]] np_arr2 is: [[10 20] [30 40]] insert_axis_none is: [ 1 100 200 300 2 4 5] insert_axis_0 is: [[ 1 2] [10 20] [30 40] [ 4 5]] insert_axis_1 is: [[ 1 10 30 2] [ 4 20 40 5]]
В предыдущем примере, когда вы вставляли 2D-массив в другой 2D-массив вдоль оси 1, каждый массив в np_arr2 был вставлен как отдельный столбец в np_arr1. Если вы хотите вставить целый 2D-массив в другой 2D-массив, добавьте квадратные скобки вокруг значения obj, чтобы указать, что весь массив должен быть вставлен перед этой позицией. Без квадратных скобок numpy.insert() складывает массивы по порядку в виде столбцов перед заданным индексом.
В следующем примере показан вывод с квадратными скобками вокруг значения параметра obj (index) и без них:
import numpy as np # create 2D array objects (integers) np_arr1 = np.array([[1, 2], [3, 4]]) np_arr2 = np.array([[10, 20], [30, 40]]) # print the arrays print("np_arr1 is:\n", np_arr1) print("np_arr2 is:\n", np_arr2) # insert an array, column by column, into another array # and print the result insert_axis_1 = np.insert(np_arr1, 1, np_arr2, axis=1) print("insert_axis_1 is:\n", insert_axis_1) # insert a whole array into another array by column # and print the result insert_index_axis_1 = np.insert(np_arr1, [1], np_arr2, axis=1) print("insert_index_axis_1 is:\n", insert_index_axis_1)
Вы получите следующий вывод:
np_arr1 is: [[1 2] [3 4]] np_arr2 is: [[10 20] [30 40]] insert_axis_1 is: [[ 1 10 30 2] [ 3 20 40 4]] insert_index_axis_1 is: [[ 1 10 20 2] [ 3 30 40 4]]
В предыдущем примере показано, как numpy.insert() вставляет столбцы в массив в зависимости от обозначенного index.
Подводим итоги
В этом мануале мы добавили элементы в массивы с помощью модулей array и NumPy.
Вставить число в массив
1) В массиве хранится информация о количестве страниц в каждой из 100 книг. Все
страницы имеют одинаковую толщину. Определить количе-ство страниц в самой
толстой книге.
2)Вставить заданное число в массив целых чисел перед всеми элементами, кратными
числу a
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Вставить число в массив не нарушая порядок построения по убыванию
вставить число в массив не нарушая порядок построения по убыванию в python пожалуста
Массив: Вставить число K перед всеми элементами, большими K, и число M после всех элементов, меньших M.
Дан целочисленный массив размера N. Вставить число K перед всеми элементами, большими K, и число M.
Массив: Вставить некоторое заданное число b в массив, сохраняя его упорядоченность.
Дан некоторый упорядоченный массив чисел (отсортированный в порядке возрастания). Написать.
196 / 162 / 41
Регистрация: 13.05.2019
Сообщений: 833
Где пример ввода-вывода? Что за массив целых чисел?
Регистрация: 06.12.2020
Сообщений: 2
1 2 3 4 5 6
import random A=[random.randint(1,10) for i in range(4)] print(A) for i in range(4): if A[i]==max(A): print(i)
196 / 162 / 41
Регистрация: 13.05.2019
Сообщений: 833
Huufufuffrf, Это не пример ввода-вывода. А что делает этот код?)
4459 / 3212 / 1125
Регистрация: 21.03.2016
Сообщений: 7,949
Сообщение от Matrix3007 
А что делает этот код?)
а что первое попалось
![]()
5416 / 3840 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
Сообщение от Matrix3007 
А что делает этот код?)
Сообщение от Huufufuffrf 
Определить количе-ство страниц в самой
толстой книге.
1727 / 967 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
Сообщение от Huufufuffrf 
Вообще не понимаю программирование в Питоне , хоть тресни
Что бы что-то понимать, нужно это изучить. Как я предполагаю, Вы питон еще не изучили, поэтому его не понимаете. Не стоит надеяться, что Вы проснетесь и о чудо, понимаете питон и можете на нем программировать. Так же не стоит надеяться, что зная один язык программирования, Вы автоматически сходу сможете программировать и на других языках.
196 / 162 / 41
Регистрация: 13.05.2019
Сообщений: 833
Garry Galler, То есть, задача уже решена? Ну попробуй запустить, посмотрим, какое там количество получится.
![]()
5416 / 3840 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
Сообщение от Matrix3007 
То есть, задача уже решена?
Я этого не говорил.
Однако это все-таки попытка решения.
1 2 3 4 5 6 7 8 9
>>> A=[random.randint(1,10) for i in range(4)] >>> A [10, 6, 1, 8] >>> for i in range(4): if A[i]==max(A): print(i) 0 # самая толстая книжка лежит по индексу 0
196 / 162 / 41
Регистрация: 13.05.2019
Сообщений: 833
Garry Galler, А где в условии сказано, что нужно индекс найти? Если я правильно всё прочитал, то задача сводится к простому нахождению максимального элемента.
![]()
5416 / 3840 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
Сообщение от Matrix3007 
А где в условии сказано, что нужно индекс найти?
Понятия не имею. Я вообще не об этом писал.
196 / 162 / 41
Регистрация: 13.05.2019
Сообщений: 833
Сообщение от Garry Galler 
0 # самая толстая книжка лежит по индексу 0
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Вставить в массив число так, чтобы массив остался неубывающим.
Добрый день! Помогите, пожалуйста, решить задачу Только каким-нибудь примитивным способом Дан.

Задать массив вещественных чисел и вставить в исходный массив число
вот такая программка Задать массив вещественных чисел с помощью датчика случайных чисел.
Массив: Вставить в массив число b так, чтобы он остался неубывающим.
Дана последовательность действительных чисел а1<=а2. <=an. Вставить в нее действительное число b.
Одномерный массив вещественных чисел. Вставить в массив некоторое число, сохраняя сортировку
Помогите пожалуйста с заданием, буду очень благодарен! Задан массив вещественных чисел. Элементы.

Упорядочить массив по возрастанию,вставить в этот массив число так,чтобы он остался возрастающим.
Дан массив и какое-то число. Упорядочить массив по возрастанию,вставить в этот массив число.
Задан массив и число х, вставить х в массив, не нарушив порядок
Помогите решить задачу Задан массив А, упорядоченный по неубыванию, и число х. Вставить х в.
Массивы в Python
Массив в Python содержит последовательность данных. В программировании на Python нет эксклюзивного объекта массива, потому что мы можем выполнять все операции с массивом, используя список. Сегодня мы узнаем о массиве и различных операциях, которые мы можем выполнять с массивом (списком).
Python поддерживает все операции, связанные с массивами, через свой объект списка. Начнем с инициализации одномерного массива.
Пример
Элементы массива в Python определяются в скобках [] и разделяются запятыми. Ниже приведен пример объявления одномерного массива.
arr = [ 1, 2 ,3, 4, 5] print (arr) print (arr[2]) print (arr[4])
Результатом приведенного выше примера программы с одномерным массивом будет:
[1, 2, 3, 4, 5] 3 5
Индексация массива начинается с 0. Значит, значение индекса 2 переменной arr равно 3.
В некоторых других языках программирования, таких как Java, когда мы определяем массив, нам также необходимо определить тип элемента, поэтому мы ограничены хранением только этого типа данных в массиве. Например, int brr [5]; может хранить только целые данные.
Но python дает нам гибкость, позволяющую иметь разные типы данных в одном массиве. Посмотрим на пример.
student_marks = ['Akkas' , 45, 36.5] marks = student_marks[1]+student_marks[2] print(student_marks[0] + ' has got in total = %d + %f = %f ' % (student_marks[1], student_marks[2], marks ))
Это дает следующий результат:
Akkas has got in total = 45 + 36.500000 = 81.500000 marks
В приведенном выше примере вы можете видеть, что массив student_marks имеет три типа данных – строку, int и float.
Многомерный массив
Двухмерный массив в Python можно объявить следующим образом.
arr2d = [ [1,3,5] ,[2,4,6] ] print(arr2d[0]) # prints elements of row 0 print(arr2d[1]) # prints elements of row 1 print(arr2d[1][1]) # prints element of row = 1, column = 1
Он выдаст следующий результат:
[1, 3, 5] [2, 4, 6] 4
Точно так же мы можем определить трехмерный массив или многомерный массив в python.
Теперь, когда мы знаем, как определять и инициализировать массив в python. Мы рассмотрим различные операции, которые мы можем выполнять с массивом.
Обход массива с использованием цикла for
Мы можем использовать цикл for для обхода элементов массива. Ниже приведен простой пример цикла for для обхода массива.
arrayElement = ["One", 2, 'Three' ] for i in range(len(arrayElement)): print(arrayElement[i])
На изображении ниже показан результат работы приведенного выше примера программы для работы с массивами.

Обход 2D-массива
Следующий код выводит элементы построчно, а следующая часть печатает каждый элемент данного массива.
arrayElement2D = [ ["Four", 5, 'Six' ] , [ 'Good', 'Food' , 'Wood'] ] for i in range(len(arrayElement2D)): print(arrayElement2D[i]) for i in range(len(arrayElement2D)): for j in range(len(arrayElement2D[i])): print(arrayElement2D[i][j])

Добавление
arrayElement = ["One", 2, 'Three' ] arrayElement.append('Four') arrayElement.append('Five') for i in range(len(arrayElement)): print(arrayElement[i])
Новые элементы Four и Five будут добавлены в конец массива.
One 2 Three Four Five
Вы также можете добавить массив к другому массиву. В следующем коде показано, как это можно сделать.
arrayElement = ["One", 2, 'Three' ] newArray = [ 'Four' , 'Five'] arrayElement.append(newArray); print(arrayElement)
['One', 2, 'Three', ['Four', 'Five']]
Теперь наш одномерный массив arrayElement превращается в многомерный массив.
Определение размера
Мы можем использовать функцию len для определения размера массива. Давайте посмотрим на простой пример длины массива Python.
arr = ["One", 2, 'Three' ] arr2d = [[1,2],[1,2,3,4]] print(len(arr)) print(len(arr2d)) print(len(arr2d[0])) print(len(arr2d[1]))
Срез
Python предоставляет особый способ создания массива из другого массива с использованием нотации срезов. Давайте посмотрим на несколько примеров срезов массива.
arr = [1,2,3,4,5,6,7] #python array slice arr1 = arr[0:3] #start to index 2 print(arr1) arr1 = arr[2:] #index 2 to end of arr print(arr1) arr1 = arr[:3] #start to index 2 print(arr1) arr1 = arr[:] #copy of whole arr print(arr1) arr1 = arr[1:6:2] # from index 1 to index 5 with step 2 print(arr1)
На изображении ниже показан пример вывода программы фрагмента массива Python.

Вставка массива
Мы можем вставить элемент в массив с помощью функции insert().
arr = [1,2,3,4,5,6,7] arr.insert(3,10) print(arr)

Функция pop
Мы можем вызвать функцию pop для массива, чтобы удалить элемент из массива по указанному индексу.
arr = [1,2,3,4,5,6,7] arr.insert(3,10) print(arr) arr.pop(3) print(arr)
