2015-02-22 2 views
1

У меня есть список a = [1,2,3,4,5]. И у меня есть функция, скажем, Func(x). Я знаю, что если я сделаю Func(a), тогда ссылка a будет передана в Func(x). И если я сделаю Func(a[:]), новый список будет создан и передан в Func(x).Как получить часть списка на Python без создания нового списка?

Так что мой вопрос: Можно ли передавать только первые три элементов в Func(x)по ссылке, как Func(a) (я не хочу, чтобы пройти весь список a в функции из-за какой-либо причине)? Если я сделаю Func(a[:4]), будет создан новый список, и этого я хочу избежать.

Единственный способ, которым я могу думать, это передать a и индексы в Func(x), например Func(a, start, end).

+1

Почему вы хотите, чтобы избежать создания нового списка? Есть ли какая-то конкретная причина? – thefourtheye

+0

Это рекурсивная функция. Если я создаю новый список каждый раз, стек будет переполняться. – stanleyli

+1

Затем передайте индекс как параметр. – thefourtheye

ответ

1

Невозможно создать «окно» в списке, нет.

Ваши единственные варианты - создать срез или передать начальные и конечные индексы функции и выполнить функцию почитать их.

Последнее, что делают bisect module functions; каждая функция принимает lo и hi параметр, который по умолчанию 0 и len(list) соответственно:

def func(lst, lo=0, hi=None): 
    if hi is None: 
     hi = len(lst) 
0

Почему бы не создать второй аргумент, чтобы Func (a) стал Func (a, n), где a - ссылка на ваш массив, а n - это позиция в массиве, к которой вы хотите оценить?

Что-то вроде:

Func (a, 2) 

С этим примером первых три элемента оценивается.

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