3

我有这个清单:

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

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

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

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

谢谢。

4

5 回答 5

6

使用filter();默认情况下,它会删除“空”(假)值:

[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')]
于 2013-03-09T09:13:43.127 回答
6

尝试这个:

>>> 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 值。

于 2013-03-09T09:14:01.000 回答
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')]
于 2013-03-09T09:14:12.563 回答
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')]
于 2013-03-09T09:38:30.737 回答
0

试试这个简短的东西...

lst = [tuple(i for i in tpl if i) for tpl in lst]
于 2013-03-09T17:01:05.807 回答