У меня возникла проблема, и я считаю, что причина связана с характером функции вставки. В документации сказано, что вставка работает следующим образом:Функция ввода списка списков Python и проблема с типом данных
list.insert(index, object)
Ключевым моментом здесь является «объект». Чтобы вести оператор if, который работает с значениями, я преобразовал исходный список в массив. Данные типа этого массива автоматически вычисляется питоном быть следующим:
In [25]: MinorTrendTypeArr.dtype
Out[25]: dtype('int64')
Однако после установки необходимых элементов в списке
MinorTrendType
новый массив,
MinorTrendTypeArr2
Как упоминалось ранее, это должно быть связано с тем, что метод добавления функции добавления элементов объекта в список. имеет тип данных
In [25]: MinorTrendTypeArr2.dtype
Out[25]: dtype('object')
Это дополнительно подтверждается получение следующее сообщение об ошибке при попытке преобразовать переменную в
MinorTrendType
в новый массив.
In [27]: run triptrade.py
This is the length of MinorTrendType the first time = 12356
This is the length of MinorTrendType after adding plustwos elements = 13179
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/usr/lib/python2.7/dist-packages/IPython/utils/py3compat.pyc in execfile(fname, *where)
173 else:
174 filename = fname
--> 175 __builtin__.execfile(filename, *where)
/home/kane/tripkane_python/triptrade.py in <module>()
579
580 MinorTrendArr2 = np.array(MinorTrend, dtype = np.int64)
--> 581 MinorTrendTypeArr2 = np.array(MinorTrendType, dtype = np.int64)
582
583
ValueError: setting an array element with a sequence.
Но та же проблема не возникает в переменной, в которой не было введенных внешних значений. Я предполагаю, что есть, вероятно, лучший способ сделать что-то, но я использую свои очень ограниченные знания в настоящий момент для прогресса. Любая помощь, предложения альтернатив были бы очень желанными. Примечание. Я не могу ввести все обязательные значения в один цикл, так как ввод элементов изменяет длину списка, если не указано, что есть более легкая работа.
Спасибо заранее,
Кейн
for n in range(0, len(MinorTrendType)):
if MinorTrendTypeArr[n] == 2:
plustwos.append(n)
pl = []
mi = []
PS1 = len(MinorTrendType)
print "This is the length of MinorTrendType the first time = %d" %PS1
for n in range(0, len(plustwos)):
bbgun = plustwos[n] + len(plustwos[0:n])
pl.append(bbgun)
MinorTrendType.insert(pl[n], 22)
MinorTrend.insert(pl[n], MinorTrend[pl[n]])
PS2 = len(MinorTrendType)
print "This is the length of MinorTrendType after adding plustwos elements = %d" %PS2
MinorTrendArr2 = np.array(MinorTrend, dtype = np.int64)
MinorTrendTypeArr2 = np.array(MinorTrendType, dtype = np.int64)
UPDATE/EDIT:
MinorTrendType
список целых чисел, например так: MinorTrendType = [1,0, -1, 1,0, -1,2, -1,1, -1,0,0,0,2,1,0,0, -1,2,1,0, -2 ........ ....]
MinorTrend
- это список индексов, где Значения MinorTrendType существуют (они просто удовлетворяют определенным условиям). Все, что я хочу добиться того, чтобы вставить маркера на каждое вхождении 2 и -2 значение в MinorTrendType и дублирует значение индекса на correpsonding сайтов в MinorTrend Я попытался с помощью карты (I, х) Int (MinorTrendType [ n]) в пределах цикла, списка и списков без успеха. Надеюсь, это упростит ситуацию. Мне все равно, как это делается, просто хочу этого достичь :)
я была совсем немного трудностей, следующих за этим. Несколько основных вопросов. 1. «Чтобы выполнить оператор if, который работает с значениями, я преобразовал исходный список в массив». - Было ли это более эффективным? Операторы Python If обрабатывают любой тип данных просто отлично (включая числовые значения). Если это все, что вам нужно, вам не нужно numpy. 2. Почему вы заботитесь о типе данных для данных? Python предназначен для утиного ввода (т. Е. Вы не заботитесь о типе, просто о функциональности). – Namey
Кроме того, я должен отметить, что в Python все является «объектом» для всех целей и целей. Любая функция, которая принимает «объект», может принимать ЛЮБЫЕ типы данных. – Namey
@Namey Спасибо за ваши запросы: 1) То, что я подразумеваю под этим утверждением, - это когда я преобразовал список в массив, так что оператор if распознает, что любое из значений в массиве - это числа (в этом случае целые числа). Когда я выполняю оператор if со списком, он не работает. 2) Я не даю крысам о типе данных, я просто хочу, чтобы 2-ое заявление работало. Я расскажу вам подробнее о редактировании/обновлении исходной проблемы. Надеюсь, это немного улучшит ситуацию. Если это не обновление, Cheers – tripkane