嵌套列表理解与枚举内置函数

时间:2016-01-27 19:17:47

标签: python python-2.7 list-comprehension enumerate

我学习列表理解,我坚持使用以下代码:

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

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

1 个答案:

答案 0 :(得分:2)

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

  • 您在列表enumerate()上创建了一个['a', 'b', 'c'],这会产生一系列带有(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'))]

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

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