从元组中删除空格

时间:2013-03-09 09:11:22

标签: python python-2.7 tuples strip

我有这个清单:

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

如何删除不需要的(主要是外部)字符,使其保持如下:

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

这是一个元组,所以我想我不能使用.strip()方法

感谢。

5 个答案:

答案 0 :(得分:5)

使用filter();它默认删除`empty'(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')]

答案 1 :(得分: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中的所有i - ish值,只留下非空字符串。


0FalseNone和任何空容器(例如[]''等)都是False - ish值。

答案 2 :(得分: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')]

答案 3 :(得分: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. 最后分配这个代替前一个元组
  4. 这是我得到的输出:

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

答案 4 :(得分:0)

试试这个简短的事情......

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