По вашему требованию я могу придумать пару альтернатив, которые, на мой взгляд, являются лучшей практикой, чем вы упомянули.
Отправьте его в теле, используя любой из POST
или PUT
.
URL: http://localhost:3000/api/prices/shopIds
Body: { shopIds: [1, 2, 3, 4] }
Вы можете получить идентификаторы, например,
const { shopIds } = req.body // shopIds = [1, 2, 3, 4]
или
const shopIds = req.body.shopIds // shopIds = [1, 2, 3, 4]
Если вы хотите использовать GET
, то используйте параметр запроса
URL: POST http://localhost:3000/api/prices/shopIds?ids=1,2,3,4
Здесь вы можете получить идентификаторы в виде строки, а затем преобразовать их в массив,
const ids = req.query.ids.split(','); // ids = [1 ,2, 3, 4]
Если вы все еще хотите использовать его так, как вы упомянули, он уже получен. Используйте этот метод!
Надеюсь, это поможет!
A little shorter and hopefully more pythonic way:
>>> A=[0,0,0,1,0,1]
>>> B=[0,0,1,1,1,1]
x = sum(1 for a,b in zip(A,B) if (a==b==1))
>>> x
2
Я не специалист по Python, но что не так с простым циклом от начала до конца первого массива?
На C # я бы сделал что-то вроде:
int match=0;
for (int cnt=0; cnt< A.Count;cnt++)
{
if ((A[cnt]==B[cnt]==1)) match++;
}
Возможно ли это на вашем языке?
Из-за краткости извращения я предлагаю следующее решение:
A = [0,0,0,1,0,1]
B = [0,0,1,1,1,1]
print len(set(i for i, n in enumerate(A) if n == 1) &
set(i for i, n in enumerate(B) if n == 1))
(Предложение Дракоши - гораздо более разумный способ решить эту проблему. Это просто демонстрирует, что часто можно смотреть на одну и ту же проблему по-разному.)
С SciPy :
>>> from scipy import array
>>> A=array([0,0,0,1,0,1])
>>> B=array([0,0,1,1,1,1])
>>> A==B
array([ True, True, False, True, False, True], dtype=bool)
>>> sum(A==B)
4
>>> A!=B
array([False, False, True, False, True, False], dtype=bool)
>>> sum(A!=B)
2
А вот еще один метод, который использует тот факт, что массив содержит только нули и единицы.
Скалярное произведение двух векторов x и y равно sum (x (i) * y (i )) единственная ситуация, дающая ненулевой результат, - это если x (i) == y (i) == 1, таким образом, используя numpy, например
from numpy import *
x = array([0,0,0,1,0,1])
y = array([0,0,1,1,1,1])
print dot(x,y)
, просто и красиво. Этот метод выполняет n умножений и добавляет n-1 раз, однако есть быстрые реализации, использующие SSE, GPGPU, векторизацию (добавьте здесь свое модное слово) для скалярных произведений (скалярных произведений)
Я сравнил numpy-метод с этим методом :
sum(1 for a,b in zip(x,y) if (a==b==1))
и обнаружил, что для 1000000 циклов numpy-версия сделала это за 2121 мс, а zip-метод сделал это за 9502 мс, таким образом, numpy-версия намного быстрее
Я сделал лучший анализ эффективности и обнаружил, что для n элементов в массиве метод zip занял t1 мс, а скалярное произведение - t2 мс за одну итерацию
elements zip dot 1 0.0030 0.0207 10 0.0063 0.0230 100 0.0393 0.0476 1000 0.3696 0.2932 10000 7.6144 2.7781 100000 115.8824 30.1305
Из этих данных можно сделать вывод, что если количество элементов в массиве ожидается равным (в среднее) больше 350 (или, скажем, 1000), следует рассмотреть возможность использования метода скалярного произведения.
[A[i]+B[i] for i in range(min([len(A), len(B)]))].count(2)
По сути, это просто создает новый список, в котором все элементы двух других добавлены вместе. Вы знаете, что было две единицы, если сумма равна 2 (при условии, что в списке есть только 0 и 1). Поэтому просто выполните операцию подсчета на 2.