Несмотря на то, что у этого есть много ответов, которые, я считаю, помогут:
const newArray = [ ...new Set( [...arr1, ...arr2] ) ]
В вопросе о том, как будет выглядеть структура массива, не сказано, поэтому, если вы точно знаете, что у вас не будет вложенных массивов или объектов в вашем массиве (это случилось со мной, поэтому я пришел к этому ответу), этот код будет работать.
Что происходит, так это то, что мы используем оператор спреда (...) для согласования обоих массивов, затем мы используем Set для устранения любых дубликатов. Если у вас есть это, вы можете сравнить их размеры, если все три массива имеют одинаковый размер, вы можете пойти.
Этот ответ также игнорирует порядок элементов, как я уже сказал, точная ситуация со мной , так что, может быть, кто-то в той же ситуации может оказаться здесь (как и я).
Edit1.
Отвечая на вопрос Дмитрия Гринько: «Почему вы использовали оператор спреда ( ...) здесь - ... новый набор? Он не работает »
Рассмотрим этот код:
const arr1 = [ 'a', 'b' ]
const arr2 = [ 'a', 'b', 'c' ]
const newArray = [ new Set( [...arr1, ...arr2] ) ]
console.log(newArray)
Вы получите
[ Set { 'a', 'b', 'c' } ]
Чтобы работать с этим значением, вам нужно будет использовать некоторые свойства Set (см. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set ). С другой стороны, когда вы используете этот код:
const arr1 = [ 'a', 'b' ]
const arr2 = [ 'a', 'b', 'c' ]
const newArray = [ ...new Set( [...arr1, ...arr2] ) ]
console.log(newArray)
Вы получите
[ 'a', 'b', 'c' ]
В этом разница, первая даст мне набор, он будет работать так как я мог бы получить размер этого набора, но последний дает мне массив, в котором я нуждаюсь, что более прямо относится к разрешению.
Вот четыре варианта:
python -mtimeit -s"N=10**6" "a = []; app = a.append;"\
"for i in xrange(N): app(i);"
10 loops, best of 3: 390 msec per loop
python -mtimeit -s"N=10**6" "a = [None]*N; app = a.append;"\
"for i in xrange(N): a[i] = i"
10 loops, best of 3: 245 msec per loop
python -mtimeit -s"from array import array; N=10**6" "a = array('i', [0]*N)"\
"for i in xrange(N):" " a[i] = i"
10 loops, best of 3: 541 msec per loop
python -mtimeit -s"from numpy import zeros; N=10**6" "a = zeros(N,dtype='i')"\
"for i in xrange(N):" " a[i] = i"
10 loops, best of 3: 353 msec per loop
Это показывает, что [None]*N
является самым быстрым, и array.array
является самым медленным в этом случае.
В большей части повседневного кода Вам не будет нужна такая оптимизация.
Однако, когда эффективность списка становится проблемой, первая вещь, необходимо сделать, заменить универсальный список введенным от array
модуль , который намного более эффективен.
Вот то, как список 4 миллионов чисел с плавающей точкой cound быть созданным:
import array
lst = array.array('f', [0.0]*4000*1000)
можно создать список известной длины как это:
>>> [None] * known_number
Если Вы желаете управлять числами эффективно в Python, затем взглянули на NumPy ( http://numpy.scipy.org/ ). Это позволяет нам, Вы делаете вещи чрезвычайно быстро при тихом получении для использования Python.
, Чтобы сделать то, что Ваше выяснение в NumPy Вы сделали бы что-то как
import numpy as np
myarray = np.zeros(4000)
, который даст Вам массив чисел с плавающей точкой, инициализированных для обнуления. Можно затем сделать, очень прохладным вещам нравится, умножают целые массивы на единственный фактор или на другие массивы и другой материал (отчасти как в Matlab, если Вы когда-либо использовали это), который очень быстр (большая часть фактической работы происходит в высоко оптимизированной части C библиотеки NumPy).
, Если это не массивы чисел Ваш после затем, Вы, вероятно, не собираетесь находить способ сделать то, что Вы хотите в Python. Список Python объектов является списком точек к объектам внутренне (я думаю так так или иначе, я не эксперт внутренностей Python), таким образом, он все еще выделил бы каждого из своих участников, поскольку Вы создаете их.
В Python все объекты выделяются на "куче".
, Но Python использует специальное средство выделения памяти, таким образом malloc
не будет назван каждый раз, когда Вам нужен новый объект.
существует также некоторая оптимизация для маленьких целых чисел (и т.п.), которые кэшируются; однако, который вводит, и как, является зависящим от реализации.