Найти - Пользователи
Полная версия: Как удалить элемент списка
Начало » Python для новичков » Как удалить элемент списка
1 2
Serbis
Есть список s, мне необходимо удалить элемент s, предварительно s был пропущен через команду list, но при попытке выполнить del s получаю ответ, что это кортеж и он не поддерживает удаление элементов. Как удалить?

Конкретно, мне нужно не просто сделать его пустым, а удалить, т. е. сдвинуть все последующие элементы относительно удаляемого.
fata1ex
Может вы приведете ваш код?

Может вы об этом. А может о чем-нибудь другом.
>>> 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)
Serbis
 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 получает список вида [2312324, Психология бессознательного, Юнг К. Г. …………… и т. д.
Все это одна стока с подэлементами, она должна быть загружена в таблицу, но в ней иногда встречаются служебные поля, которые и нужно удалить. Если я просто напишу
s[0][10] = ''
это приведет к смещению вывода в таблицу с появлением пустой ячейки, а мне нужно что бы этого не происходило, т. е. удалить элемент со смещением всей хвостовой части списка.
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 = ''
это приведет к смещению вывода в таблицу с появлением пустой ячейки, а мне нужно что бы этого не происходило, т. е. удалить элемент со смещением всей хвостовой части списка.

А где само удаление и ошибка?
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 = ''
это приведет к смещению вывода в таблицу с появлением пустой ячейки, а мне нужно что бы этого не происходило, т. е. удалить элемент со смещением всей хвостовой части списка.

А где само удаление и ошибка?
Serbis
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]
fata1ex
Значит s - кортеж, как и говорит вам интерпретатор. Вы не можете привести код целиком и вывести список s и s перед попыткой удаления? В чем проблема говорит вам traceback, а в чем причина этой проблемы сказать, не видя вашего кода, я не могу, это к reclosedev - он у нас экстрасенс.
Serbis
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

Содержимое s


('2312324', ‘\xd0\x9f\xd1\x81\xd0\xb8\xd1\x85\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xb3\xd0\xb8\xd1\x8f \xd0\xb1\xd0\xb5\xd1\x81\xd1\x81\xd0\xbe\xd0\xb7\xd0\xbd\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8c\xd0\xbd\xd0\xbe\xd0\xb3\xd0\xbe’, ‘\xd0\x9a. \xd0\x93. \xd0\xae\xd0\xbd\xd0\xb3’, ‘01100811’, ‘9785883730022’, ‘2137’, ‘\xd0\x9a\xd0\xa2\xd0\x9a: 011’, 8.0, 319.0, ‘null’, 18.0, 250.0, 15.0, 150.0, 0.29999999999999999, ‘\xd0\x9a\xd1\x80\xd0\xb0\xd1\x81\xd0\xbd\xd1\x8b\xd0\xb9’, 8.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ‘\xd0\xa8\xd1\x82\xd1\x83\xd0\xba\xd0\xb0’, 1.0, 319.0, None, None, None, 140.0, ‘X’, ‘26.06.2012’, ‘26.06.2012’, ‘26.06.2012’, ‘null’, ‘null’, ‘null’, ‘\xd0\xae\xd0\xbd\xd0\xb3. \xd0\x9f\xd1\x81\xd0\xb8\xd1\x85\xd0\xbe\xd0\xbb \xd0\x91\xd0\xb5\xd1\x81\xd1\x81\xd0\xbe\xd0\xb7\xd0\xbd.’, ‘null’, None, ‘null’, ‘RU’)

Вывод по коду:

Traceback (most recent call last):
File “/home/serbis/Prog/python/b3/sources/createa/head.py”, line 95, in slot_ok
tb.changeArticle(self.art_edit.text())
File “/home/serbis/Prog/python/b3/sources/createa/table.py”, line 149, in changeArticle
self.upDataToTable(art)
File “/home/serbis/Prog/python/b3/sources/createa/table.py”, line 374, in upDataToTable
del s
TypeError: ‘tuple’ object doesn't support item deletion

fata1ex
Serbis
Содержимое s
Это кортеж.
reclosedev
Serbis
Вам fata1ex выше про причины и кортеж уже ответил.

Почему бы не указывать только интересующие поля (например, исключив десятое) при запросе к базе?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB