Наряду с принятым ответом, который правильно объяснил проблему, в понимании вашего списка, если вы используете python-2.x, используйте xrange()
, который возвращает более эффективный генератор (range()
в python 3 выполняет ту же работу ) _
вместо переменной throw n
:
[[1]*4 for _ in xrange(3)] # and in python3 [[1]*4 for _ in range(3)]
Кроме того, в качестве более Pythonic способа вы можете использовать itertools.repeat()
для создания объекта итератора повторяющихся элементов:
>>> a=list(repeat(1,4))
[1, 1, 1, 1]
>>> a[0]=5
>>> a
[5, 1, 1, 1]
PS Используя numpy, если вы хотите создать только массив единиц или нулей, вы можете использовать np.ones
и np.zeros
и / или для использования других чисел np.repeat()
:
In [1]: import numpy as np
In [2]:
In [2]: np.ones(4)
Out[2]: array([ 1., 1., 1., 1.])
In [3]: np.ones((4, 2))
Out[3]:
array([[ 1., 1.],
[ 1., 1.],
[ 1., 1.],
[ 1., 1.]])
In [4]: np.zeros((4, 2))
Out[4]:
array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])
In [5]: np.repeat([7], 10)
Out[5]: array([7, 7, 7, 7, 7, 7, 7, 7, 7, 7])
Не уверен, почему вы получаете разные результаты для приведенных выше сопоставлений. По сути, оба отображения должны давать одинаковые результаты, поскольку они одинаковы для поля pan_no . Я проверил приведенные выше сопоставления в моей локальной среде, и я получаю те же результаты. По умолчанию для анализатора типа текста используется стандартный анализатор, и он выдаст результат для запроса (в соответствии с вашими примерами данных):
{
"query":{
"match":{
"pan_no":"ABCDEGFTY"
}
}
}
Теперь, когда я ввожу pan_no как ABCD, он должен вернуть мне вышеуказанный документ.
blockquote>pan_no, так как ABCD не даст никаких данных для вашего образца, так как по умолчанию используется стандартный анализатор.