Ссылка на часть списка – Python

Если у меня есть список в python, как я могу создать ссылку на часть списка? Например:

myList = ["*", "*", "*", "*", "*", "*", "*", "*", "*"] listPart = myList[0:7:3] #This makes a new list, which is not what I want myList[0] = "1" listPart[0] "1" 

Возможно ли это, и если да, то как мне его закодировать?

Привет, Джо

4 Solutions collect form web for “Ссылка на часть списка – Python”

Использовать объект среза или истребитель islice?

http://docs.python.org/library/functions.html#slice

Вы можете написать тип списка . Вот что я написал в качестве эксперимента, он ни в коем случае не гарантирует, что он будет полным или без ошибок

 class listview (object): def __init__(self, data, start, end): self.data = data self.start, self.end = start, end def __repr__(self): return "<%s %s>" % (type(self).__name__, list(self)) def __len__(self): return self.end - self.start def __getitem__(self, idx): if isinstance(idx, slice): return [self[i] for i in xrange(*idx.indices(len(self)))] if idx >= len(self): raise IndexError idx %= len(self) return self.data[self.start+idx] def __setitem__(self, idx, val): if isinstance(idx, slice): start, stop, stride = idx.indices(len(self)) for i, v in zip(xrange(start, stop, stride), val): self[i] = v return if idx >= len(self): raise IndexError(idx) idx %= len(self) self.data[self.start+idx] = val L = range(10) s = listview(L, 2, 5) print L print s print len(s) s[:] = range(3) print s[:] print L 

Вывод:

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <listview [2, 3, 4]> 3 [0, 1, 2] [0, 1, 0, 1, 2, 5, 6, 7, 8, 9] 

Вы можете присваивать индексы в списке, и он будет отражать основной список. Тем не менее, нет смысла определять append или подобные действия в listview. Он также может ломаться, если основной список изменяется по длине.

В python ничего нет, что действительно делает то, что вы хотите. В основном вы хотите написать какой-то прокси-объект.

Я думаю, что это невозможно. Это приведет ко многим возможным ошибкам, например: что, когда вы добавляете список, который ссылается на часть большего списка? Будет ли заменен следующий элемент в большом списке или вставлен?

Насколько я знаю, silce – это внутренний механизм для получения элементов списка. Они не создают новый объект списка, ссылаясь на части более старого объекта списка. Islice просто выполняет итерации над элементами, заданными срезом, это также не ссылка, но фактический объект – его изменение не влияет на исходный список. Или я ошибаюсь?

Как и в комментарии, и это решение действительно помогает г-ну Бастиену, вы можете сделать:

 sliceobject = slice(0,7,3) for i in xrange(sliceobject.start, sliceobject.stop, sliceobject.step) myList[i] = whatever 

Таким образом, вы можете получить доступ к каждому указанному элементу списка по ссылке.

  • Функции PISTON LIST не возвращают новые списки
  • поиск наибольшего количества одного столбца в списке списка python
  • Лучший способ удалить элементы из списка
  • Как бы вы сделали строку, разделенную запятыми, из списка?
  • Что означает «понимание списка»? Как это работает и как я могу его использовать?
  • Отрицательное индексирование в Python
  • python: создать список кортежей из списков
  • Проблема с списком Python
  • Python: копирование списка в списке
  • как объединить два подсписок, разделяющих какое-то общее число?
  • Смешайте два списка python
  • Python - лучший язык программирования в мире.