2013-03-09 2 views
2

У меня есть этот список:Удаление пробелов из кортежа

[('', '', '654', 'Tom', '- Jerry', '', '', ''), 
('', '', '', '', '', '756', 'X-Man -', 'Batman'), 
('453', 'Hulk - Superman', '', '', '', '', '', '')] 

Как удалить ненужные (в основном внешние) символов, так что он остается чем-то вроде этого:

[('654', 'Tom' , '- Jerry'), 
('756', 'X-man' -', Batman'), 
('435','Hulk - Superman')] 

Это кортеж, так что я думаю, я не могу использовать метод .strip()

Спасибо.

+0

' 'Том' -«Jerry'' не является корректным выражением Python (равно как и другие примеры у ou дать с тире) – Volatility

+0

Я знаю, спешил. спасибо ребятам – nutship

+0

Вы не можете использовать дефис между двумя элементами кортежа. Вам придется сделать это другим элементом кортежа. – IcyFlame

ответ

5

filter(); она удаляет `пустые» (falsey) значения по умолчанию:

[tuple(filter(None, tp)) for tp in inputlist] 

Демо:

>>> [tuple(filter(None, tp)) for tp in inputlist] 
[('654', 'Tom', '- Jerry'), ('756', 'X-Man -', 'Batman'), ('453', 'Hulk - Superman')] 
5

Попробуйте это:

>>> t = [('', '', '654', 'Tom', '- Jerry', '', '', ''), 
     ('', '', '', '', '', '756', 'X-Man -', 'Batman'), 
     ('453', 'Hulk - Superman', '', '', '', '', '', '')] 

>>> [tuple(filter(None, i)) for i in t] 
[('654', 'Tom', '- Jerry'), ('756', 'X-Man -', 'Batman'), ('453', 'Hulk - Superman')] 

filter(None, i) удаляет False -ish значение в i, оставив вас причем только строки, которые не являются пустыми.


0, False, None и любой пустой контейнер (например, [], '' и т.д.) являются False -ish значения.

4

Если вы пытаетесь избавиться от пустых строк, я бы рекомендовал фильтр:

In [4]: myList = [('', '', '654', 'Tom', '- Jerry', '', '', ''), ('', '', '', '', '', '756', 'X-Man -', 'Batman'), ('453', 'Hulk - Superman', '', '', '', '', '', '')] 

In [5]: [tuple(itertools.ifilter(None, t)) for t in myList] 
Out[5]: 
[('654', 'Tom', '- Jerry'), 
('756', 'X-Man -', 'Batman'), 
('453', 'Hulk - Superman')] 
0

Я попытался следующий код с вашего списка, и она работает:

list1 = [('', '', '654', 'Tom', '- Jerry', '', '', ''), ('', '', '', '', '', '756', 'X-Man -', 'Batman'), ('453', 'Hulk - Superman', '', '', '', '', '', '')] ##you can add the elements as you want 
tuple2 =() 
for i in range(len(list1)): 
    if type(list1[i]) == tuple: 
     k = 0 
     for e in list1[i]: 
      if not e == ' ' and not e == '': 
       tuple2 = tuple2 + (e,) 
       k+=1 

     list1[i] = tuple2 

print list1 

Что она делает это:

  1. он проверяет, является ли тип элемента кортежа
  2. Тогда для всех элементов в кортеже, если это пространство, то оно игнорируется еще он добавляется в кортеже
  3. Наконец это назначается вместо предыдущего кортежа

Это выход что я получил:

>>> list1 
[('654', 'Tom', '- Jerry'), ('654', 'Tom', '- Jerry', '756', 'X-Man -', 'Batman'), ('654', 'Tom', '- Jerry', '756', 'X-Man -', 'Batman', '453', 'Hulk - Superman')] 
0

Попробуйте эту короткую вещь ...

lst = [tuple(i for i in tpl if i) for tpl in lst]