【问题标题】:split int and bool values in two different lists [duplicate]在两个不同的列表中拆分 int 和 bool 值[重复]
【发布时间】:2016-03-08 08:50:33
【问题描述】:

我有以下清单:

a = [1104537600, 1199145600, False, 1199145600, 1443886293, True]

我想将此列表拆分为两个子列表,例如:

[[1104537600, 1199145600,1199145600, 1443886293],[False,True]]

我正在使用以下结果:

b = [value for value in a if type(value) is int]
c = [value for value in a if type(value) is bool]
d = [b,c]

但是还有更优雅的方式吗?一行?

【问题讨论】:

  • 对我来说看起来很优雅。

标签: python


【解决方案1】:

你的尝试很好理解,更多的你可以将 ur b 和 c 组合在一个语句中:

d=[[value for value in a if type(value) is bool ],[value for value in a if type(value) is int ]]

【讨论】:

    【解决方案2】:

    使用传统的 for 循环。通过这种方式,您无需对同一个列表进行两次迭代。

    >>> num, b = [], []
    >>> for i in a:
        if type(i) is int:
            num.append(i)
        elif type(i) is bool:
            b.append(i)
    
    
    >>> num
    [1104537600, 1199145600, 1199145600, 1443886293]
    >>> b
    [False, True]
    >>> [num, b]
    [[1104537600, 1199145600, 1199145600, 1443886293], [False, True]]
    

    【讨论】:

    • 但它更优雅吗?安全的非常极端的情况,迭代一次或两次对性能没有影响。
    【解决方案3】:

    我想在一行中这样做实际上会不那么优雅。 请记住,如果我们不考虑性能,最重要的是某人(或未来的您)可以轻松理解您的代码。

    这个通俗易懂,没有错,我一定会去的

    【讨论】:

      【解决方案4】:

      您可以按如下方式构建d 列表:

      a = [1104537600, 1199145600, False, 1199145600, 1443886293, True]
      d = [[], []]
      
      for value in a:
          if type(value) is int:
              d[0].append(value)
          elif type(value) is bool:
              d[1].append(value)    
      
      print d  
      

      给予:

      [[1104537600, 1199145600, 1199145600, 1443886293], [False, True]]
      

      【讨论】:

        猜你喜欢
        • 2021-06-16
        • 1970-01-01
        • 2021-08-20
        • 2020-08-25
        • 2019-07-06
        • 2019-10-27
        • 1970-01-01
        • 2012-10-20
        • 2019-03-04
        相关资源
        最近更新 更多