【问题标题】:Python lists comprehension [closed]Python列出理解[关闭]
【发布时间】:2014-07-11 05:26:43
【问题描述】:
string = "Hello 12345 World"
numbers = [x for x in string if x.isdigit()]
print numbers

>> ['1', '2', '3', '4', '5']

另一个例子:

>>> noprimes = [j for i in range(2, 8) for j in range(i*2, 50, i)]
>>> primes = [x for x in range(2, 50) if x not in noprimes]
>>> print primes
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

让我感到困惑的是x for x 部分。我以前在几个地方见过它,但不确定它是什么意思。有人可以为这些示例提供更多示例和解释吗?

【问题讨论】:

    标签: python list python-2.7


    【解决方案1】:

    这些构造称为list comprehension

    简单示例

    [x for x in iterable] 字面意思是“对于可迭代的每个元素,将该元素添加到新创建的列表中”,相当于

    new_list = []
    for x in iterable:
        new_list.append(x)
    

    逐行解释:

    循环列表理解 -------------------------------------------------- ---------------------- new_list = [] [x for x in iterable] for x in iterable: [x for x in iterable] new_list.append(x) [x for x in iterable]

    稍微复杂一点的例子

    [int(x) for x in string if x.isdigit()] 可以理解为“对于可迭代的每个元素,如果x.isdigit(),则将应用int 的结果添加到新创建的列表中”。

    逐行解释:

    循环列表理解 -------------------------------------------------- ---------------------- numbers = [] [int(x) for x in string if x.isdigit()] for x in string: [int(x) for x in string if x.isdigit()] if x.isdigit(): [int(x) for x in string if x.isdigit()] numbers.append(int(x)) [int(x) for x in string if x.isdigit()]

    【讨论】:

      【解决方案2】:

      numbers = [x for x in string if x.isdigit()] 表示如果 x 是数字,则逐项列出字符串中的每个 x

      翻译成

         numbers = []
          for x in string:
              if x.isdigit()
                 numbers.append(x)
      

      【讨论】:

        【解决方案3】:

        它被称为list comprehension,用于使用表达式而不是3个以上的语句来构建列表。

        numbers = [x for x in string if x.isdigit()]
        

        等价于:

        numbers = []
        for x in string:
            if x.isdigit():
                numbers.append(x)
        

        然后

        noprimes = [j for i in range(2, 8) for j in range(i*2, 50, i)]
        

        等价于:

        noprimes = []
        for i in range(2, 8): 
            for j in range(i*2, 50, i):
                noprimes.append(j)
        

        primes = [x for x in range(2, 50) if x not in noprimes]
        

        等价于:

        primes = []
        for x in range(2, 50):
            if x not in noprimes
                primes.append(x)
        

        但写成单行。


        注意:你也可以构建一个生成器:

        (x for x in range(0, 10))
        

        一组:

        {x for x in range(0, 10)}
        

        还有一本字典:

        {(x, x) for x in range(0, 10)}
        

        【讨论】:

          【解决方案4】:
          numbers = [x for x in string if x.isdigit()]
          

          上面的列表推导类似于下面的传统代码:

          numbers = []
          
          for x in string:
              if x.isdigit():
                  numbers.append(x)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-11-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-06-13
            • 2014-08-07
            • 2016-01-16
            • 2015-04-15
            相关资源
            最近更新 更多