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

Вы, вероятно, унесли свою квоту - таблица данных больше, чем позволенный максимальный размер пакета для Вашего соединения.

, вероятно, необходимо установить MaxReceivedMessageSize и MaxBufferSize к более высоким значениям на соединении.

12
задан Bastien Léonard 24 November 2009 в 08:18
поделиться

4 ответа

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

2
ответ дан 2 December 2019 в 22:22
поделиться

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

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]

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

4
ответ дан 2 December 2019 в 22:22
поделиться

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

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

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

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

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

1
ответ дан 2 December 2019 в 22:22
поделиться

Использовать объект среза или итератор фрагмента?

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

3
ответ дан 2 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: