【问题标题】:Removing spaces from tuple从元组中删除空格
【发布时间】:2013-03-09 09:11:21
【问题描述】:

我有这个清单:

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

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

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

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

谢谢。

【问题讨论】:

  • 'Tom' - 'Jerry' 不是一个有效的 Python 表达式(你用破折号给出的其他例子也不是)
  • 我知道,很着急。谢谢大家
  • 您不能在元组的两个元素之间使用连字符。您必须将其设为元组的不同元素。

标签: python python-2.7 tuples strip


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试这个:

    >>> 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-ish 值,只留下非空字符串。


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

    【讨论】:

      【解决方案3】:

      如果您想摆脱空字符串,我建议您使用过滤器:

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

      【讨论】:

        【解决方案4】:

        我在您的列表中尝试了以下代码,它正在工作:

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-10-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-18
            • 1970-01-01
            相关资源
            最近更新 更多