2013-07-04 3 views
0

Мне нужно проверить подсписчик для определенного свойства, а затем вернуть bin, который удовлетворяет этому свойству, но как индекс исходного списка. В настоящее время мне нужно сделать это вручную:Выполнение индексов подсписков относится к исходному списку

sublist = mylist[start:end] 

positive = search(sublist) 
positive = start + positive 
posiveList.append(positive) 

Есть ли более элегантный/идиоматический способ достижения этого?

+0

Пожалуйста, укажите лучший пример, чтобы сделать его более понятным. –

ответ

2

Я думаю, что вы спрашиваете, это:

Если я искать и находить индекс в подсписке, есть простой способ, чтобы преобразовать его в свой индекс в исходном списке?

Нет, единственный способ это то, что вы уже делаете: вы должны добавить start смещение назад к индексу, чтобы получить индекс в исходном списке.

Это имеет смысл, потому что существует фактической ассоциации между подсписью и исходным списком. Возьмем такой пример, например:

>>> x = [1,2,3,4,5] 
>>> y = x[1:3] 
>>> z = [2,3] 
>>> y == z 
True 

z имеет столько же из отношения к x как y должен x. Несмотря на то, что y был создан с использованием синтаксиса среза, это всего лишь копия диапазона элементов в x. Это просто список ванили и не имеет фактических ссылок на исходный список x. Поскольку между x и y нет связи, нет никакой возможности получить оригинал x -index обратно с y -index.

1

Если я правильно понял вас, вы хотите сохранить индексы всех соответствующих элементов.

Если это так, то думаю, что вы ищете это:

positiveList = [i for i, item in enumerate(mylist[start:end]) 
       if validate_item(item)] 

Где validate_item должен по существу проверить, требуется ли этот элемент или нет, и вернуть True/False.

0

Если ваш оператор поиска поддерживает его или может быть изменен для его поддержки, тогда search(wholelist, startfrom, endat) должен вернуть фактический индекс.

Смежные вопросы