具有枚举内置函数的嵌套列表理解
Nested list comprehension with enumerate build-in function
我正在学习列表理解,但我卡在了以下代码中:
[[c for c in enumerate(r)] for r in enumerate(['a','b','c'])]
哪个returns:
[[(0, 0), (1, 'a')], [(0, 1), (1, 'b')], [(0, 2), (1, 'c')]]
然而,我期待的是:
[[(0,(0,'a'))],[(1,(1,'b'))],[(2,(2,'c'))]]
我看了一些文章,但无法理解提示输出。请有人给我解释一下。
您正在枚举外部 enumerate()
:
的每个单独元素
您在列表 ['a', 'b', 'c']
上创建一个 enumerate()
,这将生成一个包含 (counter, letter)
.
的元组序列
然后将 enumerate()
应用于每个 (counter, letter)
元组,生成 (0, count)
和 (1, letter)
元组 each.
所以最后你得到列表中每个字母的以下元素 ['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'))]
我正在学习列表理解,但我卡在了以下代码中:
[[c for c in enumerate(r)] for r in enumerate(['a','b','c'])]
哪个returns:
[[(0, 0), (1, 'a')], [(0, 1), (1, 'b')], [(0, 2), (1, 'c')]]
然而,我期待的是:
[[(0,(0,'a'))],[(1,(1,'b'))],[(2,(2,'c'))]]
我看了一些文章,但无法理解提示输出。请有人给我解释一下。
您正在枚举外部 enumerate()
:
您在列表
['a', 'b', 'c']
上创建一个enumerate()
,这将生成一个包含(counter, letter)
. 的元组序列
然后将
enumerate()
应用于每个(counter, letter)
元组,生成(0, count)
和(1, letter)
元组 each.
所以最后你得到列表中每个字母的以下元素 ['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'))]