【问题标题】:Nested list comprehension with enumerate build-in function具有枚举内置函数的嵌套列表理解
【发布时间】:2016-01-27 19:17:46
【问题描述】:

我正在学习列表理解,但我陷入了以下代码:

[[c for c in enumerate(r)] for r in enumerate(['a','b','c'])]

返回:

[[(0, 0), (1, 'a')], [(0, 1), (1, 'b')], [(0, 2), (1, 'c')]]

但是,我期待这个:

[[(0,(0,'a'))],[(1,(1,'b'))],[(2,(2,'c'))]]

我阅读了一些文章,但无法理解提示的输出。请有人给我解释一下。

【问题讨论】:

    标签: python python-2.7 list-comprehension enumerate


    【解决方案1】:

    您正在枚举外部enumerate()每个单独元素

    • 您在列表['a', 'b', 'c'] 上创建一个enumerate(),这会生成带有(counter, letter) 的元组序列。

    • 然后将enumerate() 应用于每个(counter, letter) 元组,生成(0, count)(1, letter) 元组每个

    所以最后你会得到列表['a', 'b', 'c']中每个字母的以下元素:

    [
        [(0, 0), (1, 'a')],  # enumerate((0, 'a'))
        [(0, 1), (1, 'b')],  # enumerate((1, 'b'))
        [(0, 2), (1, 'c')],  # enumerate((2, 'c'))
    ]
    

    如果您想获得(counter, (counter, element)),则需要将enumerate() 应用于enumerate()整个输出,而不是应用于每个单独的元组:

    >>> [combo for combo in enumerate(enumerate(['a','b','c']))]
    [(0, (0, 'a')), (1, (1, 'b')), (2, (2, 'c'))]
    

    您也可以在enumerate() 上致电list()

    >>> list(enumerate(enumerate(['a','b','c'])))
    [(0, (0, 'a')), (1, (1, 'b')), (2, (2, 'c'))]
    

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      相关资源
      最近更新 更多