我学习列表理解,我坚持使用以下代码:
[[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'))]]
我阅读了一些文章,但无法理解提示的输出。有人可以向我解释一下。
答案 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'))]