从元组中删除空格

3

我有这个列表:

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

我应该如何删除不必要的字符(主要是外层字符),以使它保持类似于这样的形式:
[('654', 'Tom' , '- Jerry'), 
 ('756', 'X-man' -', Batman'),
 ('435','Hulk - Superman')]

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

谢谢。


“'Tom' - 'Jerry'” 不是有效的 Python 表达式(其他带破折号的示例也不是)。 - Volatility
我知道,当时很匆忙。谢谢大家。 - nutship
你不能在元组的两个元素之间使用连字符。你必须将其作为元组的另一个元素。 - IcyFlame
5个回答

6

使用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')]

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)会在i中移除任何类似False的值,只留下非空的字符串。


0FalseNone以及任何空容器(例如[]''等)都是类似False的值。


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

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

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

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')]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接