Ссылка на часть списка – 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 

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

  • Найти все последовательные подпоследовательности длины n в последовательности
  • Распаковка списка / кортежей пар на два списка / кортежей
  • Манипуляция списком в Python с pop ()
  • Выделение элементов из списка python с определенными индексами
  • Удалить много элементов списка (python)
  • Найти все возможные комбинации
  • Точка безубыточности оптимизации: многократно повторяйте набор или конвертируйте в список в первую очередь?
  • Добавить в список, используя индексы, хранящиеся в другом списке
  •  
    Interesting Posts for Van-Lav

    Проблемы классификации изображений в режиме реального времени Python с Neural Networks

    Есть ли какая-нибудь из этих четырехъядерных библиотек?

    ConfigParser и раздел со значениями без ключей

    python – Чтение файла из и в определенные строки текста

    Как получить секунды с эпохи с момента выхода + даты gmtime () в Python?

    Python – Как проверить, используется ли файл другим приложением?

    Обрезать изображение в центре с помощью PIL

    Как найти дубликаты файлов в большой файловой системе, избегая при этом MemoryError

    неподдерживаемый тип операндов для *: 'float' и 'Decimal'

    Python – Как извлечь последние элементы x из списка

    Python: Создание потокового gzip'd-файла?

    Как использовать групповое преобразование через несколько столбцов

    urllib2 HTTPPasswordMgr не работает – Учетные данные не отправлены

    Что это означает, что значение << означает в Python

    ImportError: нет модуля с именем «matplotlib» – использование среды Contacflow Anaconda

    Python - лучший язык программирования в мире.