【问题标题】:Remove tuple from list of tuples if certain condition is met如果满足特定条件,则从元组列表中删除元组
【发布时间】:2014-05-22 08:43:18
【问题描述】:

我有一个看起来像这样的元组列表;

ListTuples = [(100, 'AAA'), (80, 'BBB'), (20, 'CCC'), (40, 'DDD')]

当元组的第一个元素小于 50 时,我想删除元组。OutputList 将如下所示;

OutputList = [(100, 'AAA'), (80, 'BBB')]

这在 python 中如何实现?

非常感谢您的帮助。

【问题讨论】:

    标签: python list python-2.7 tuples


    【解决方案1】:

    您可以轻松地做到这一点:

    out_tup = [i for i in in_tup if i[0] >= 50]
    
    [Out]: [(100, 'AAA'), (80, 'BBB')]
    

    这只是创建一个新的元组列表,其中仅包含第一个元素大于或等于 50 的元组。结果相同,但方法不同。您接受有效元组,而不是删除无效元组。

    【讨论】:

      【解决方案2】:

      你也可以这样做:

      >>> OutputList = filter(ListTuples, lambda x: x[0] >= 50)
      >>> OutputList
      [(100, 'AAA'), (80, 'BBB')]
      

      【讨论】:

      • 请问使用filter和lambda是否比sshashank124提供的答案慢?
      • @user3293156 通常filter 稍快,因为它是一个内置函数。
      • @AlexThornton 仅在与内置函数一起使用时,使用 lambda 时会很慢。
      • @Aशwiniचhaudhary 我想,但差异应该是微不足道的。
      • 请注意,这会引发错误。语法必须是filter(function, list),所以OutputList = filter(lambda x: x[0] >= 50, ListTuples )
      【解决方案3】:

      用于计时 sshashank124 和 Alex Thornton 给出的解决方案的代码 sn-p:

      ListTuples = [(100, 'AAA'), (80, 'BBB'), (20, 'CCC'), (40, 'DDD')]
      import timeit
      timeit.timeit('[i for i in ListTuples if i[0] >= 50]', globals=globals(), number=1000000)
      >>> 0.6041104920150246
      
      timeit.timeit('filter(lambda x: x[0] >= 50, ListTuples)', globals=globals(), number=1000000)
      >>> 0.3009479799948167
      

      对于这个例子来说,内置的 filter() 解决方案更快。

      【讨论】:

        【解决方案4】:

        我们可以用简单的计数器和一个新列表来做到这一点:

           new = []
        
           for i in ListTuples:
                for j in i:
                    if ( counter % 2 == 0 ):
                        if ( j > 50):
                            new.append(i)
                    counter = counter +1
        

        输出:

        [(100, 'AAA') , (80, 'BBB')]
        

        【讨论】:

          【解决方案5】:

          试试这个,

          >>> ListTuples = [(100, 'AAA'), (80, 'BBB'), (20, 'CCC'), (40, 'DDD')]
          >>> new=[]
          >>> for i in ListTuples:
              if i[0]>50:
                  new.append(i)
          
          
          >>> new
          [(100, 'AAA'), (80, 'BBB')]
          >>>
          

          【讨论】:

          • 这段代码看起来很眼熟。它看起来像 C 语言的一种语法。但是执行速度是否比 Alex Thornton 和 sshashank124 提供的 Pythonic 代码慢?
          【解决方案6】:
          ListTuples = [(100, 'AAA'), (80, 'BBB'), (20, 'CCC'), (40, 'DDD')]
          out=[]
          for item in ListTuples:
              if item[0]>50:
                  out.append((item[0],item[1]))
          print(out)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-08
            • 1970-01-01
            • 2019-06-04
            • 1970-01-01
            • 2015-10-13
            • 1970-01-01
            相关资源
            最近更新 更多