Форум сайта python.su
0
Есть список s, мне необходимо удалить элемент s, предварительно s был пропущен через команду list, но при попытке выполнить del s получаю ответ, что это кортеж и он не поддерживает удаление элементов. Как удалить?
Конкретно, мне нужно не просто сделать его пустым, а удалить, т. е. сдвинуть все последующие элементы относительно удаляемого.
Отредактировано Serbis (Июнь 27, 2012 16:23:47)
Офлайн
52
Может вы приведете ваш код?
Может вы об этом. А может о чем-нибудь другом.
>>> tup = (1, 2, 3, [1,2,3], 4, 5, 6) >>> del tup[3] Traceback (most recent call last): File "<input>", line 1, in <module> TypeError: 'tuple' object doesn't support item deletion >>> tup = tup[:3] + tup[4:] >>> tup (1, 2, 3, 4, 5, 6)
Офлайн
0
s = self.source.loadFromServer(art) s = list(s) i = 0 while i<= len(s[0]): it = QtGui.QTableWidgetItem(fromUtf8(str(s[0][i]))) self.table.setItem(i, 1, it) i = i + 1
s[0][10] = ''
Офлайн
52
Serbis
s = self.source.loadFromServer(art)
s = list(s)
i = 0
while i<= len(s):
it = QtGui.QTableWidgetItem(fromUtf8(str(s)))
self.table.setItem(i, 1, it)
i = i + 1
Переменная s получает список вида [2312324, Психология бессознательного, Юнг К. Г. …………… и т. д.
Все это одна стока с подэлементами, она должна быть загружена в таблицу, но в ней иногда встречаются служебные поля, которые и нужно удалить. Если я просто напишу
s = ''
это приведет к смещению вывода в таблицу с появлением пустой ячейки, а мне нужно что бы этого не происходило, т. е. удалить элемент со смещением всей хвостовой части списка.
Офлайн
52
Serbis
s = self.source.loadFromServer(art)
s = list(s)
i = 0
while i<= len(s):
it = QtGui.QTableWidgetItem(fromUtf8(str(s)))
self.table.setItem(i, 1, it)
i = i + 1
Переменная s получает список вида [2312324, Психология бессознательного, Юнг К. Г. …………… и т. д.
Все это одна стока с подэлементами, она должна быть загружена в таблицу, но в ней иногда встречаются служебные поля, которые и нужно удалить. Если я просто напишу
s = ''
это приведет к смещению вывода в таблицу с появлением пустой ячейки, а мне нужно что бы этого не происходило, т. е. удалить элемент со смещением всей хвостовой части списка.
Офлайн
0
fata1exОшибка именно так которую вы привели и именно от этой же команды, с тем лишь различием что у меня удаляется подэелемент.Serbis
s = self.source.loadFromServer(art)
s = list(s)
i = 0
while i<= len(s):
it = QtGui.QTableWidgetItem(fromUtf8(str(s)))
self.table.setItem(i, 1, it)
i = i + 1
Переменная s получает список вида [2312324, Психология бессознательного, Юнг К. Г. …………… и т. д.
Все это одна стока с подэлементами, она должна быть загружена в таблицу, но в ней иногда встречаются служебные поля, которые и нужно удалить. Если я просто напишу
s = ''
это приведет к смещению вывода в таблицу с появлением пустой ячейки, а мне нужно что бы этого не происходило, т. е. удалить элемент со смещением всей хвостовой части списка.
А где само удаление и ошибка?
del s[0][10]
Офлайн
52
Значит s - кортеж, как и говорит вам интерпретатор. Вы не можете привести код целиком и вывести список s и s перед попыткой удаления? В чем проблема говорит вам traceback, а в чем причина этой проблемы сказать, не видя вашего кода, я не могу, это к reclosedev - он у нас экстрасенс.
Офлайн
0
def loadFromServer(self, art): print 'LoadFormServer' s = [] self.connectToBase() try: q = "SELECT * FROM article WHERE article = '%s';" % (art) self.cur.execute(q) while 1: row = self.cur.fetchone() if not row: break s.append(row) return s except Exception, e: print e def upDataToTable(self, art): s = self.source.loadFromServer(art) s = list(s) i = 0 del s[0][10] while i<= len(s[0]): it = QtGui.QTableWidgetItem(fromUtf8(str(s[0][i]))) self.table.setItem(i, 1, it) i = i + 1
Офлайн
52
SerbisЭто кортеж.
Содержимое s
Офлайн
173
Serbis
Вам fata1ex выше про причины и кортеж уже ответил.
Почему бы не указывать только интересующие поля (например, исключив десятое) при запросе к базе?
Офлайн