我想得到x出现在嵌套列表中的次数.
如果列表是:
list = [1, 2, 1, 1, 4]
list.count(1)
>>3
Run Code Online (Sandbox Code Playgroud)
还行吧.但如果列表是:
list = [[1, 2, 3],[1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)
如何获得1次出现的次数?在这种情况下,4.
我是一个编程新手,并且在理解我的python教科书(Magnus Lie Hetland的"Beginning Python")中的一个例子时遇到了一些麻烦.该示例用于递归生成器,旨在展平嵌套列表的元素(具有任意深度):
def flatten(nested):
try:
for sublist in nested:
for element in flatten(sublist):
yield element
except TypeError:
yield nested
Run Code Online (Sandbox Code Playgroud)
然后,您将按如下方式提供嵌套列表:
>>> list(flatten([[[1],2],3,4,[5,[6,7]],8]))
[1,2,3,4,5,6,7,8]
Run Code Online (Sandbox Code Playgroud)
我理解flatten()中的递归如何帮助减少到这个列表的最内层元素'1',但是我不明白当'1'实际上作为'嵌套传递回flatten()时会发生什么".我认为这会导致TypeError(不能迭代一个数字),并且异常处理实际上是用于生成输出的繁重工作......但是使用flatten()的修改版本进行测试已经说服了我事实并非如此.相反,似乎'yield element'行是负责任的.
那就是说,我的问题是......如何"屈服元素"实际上被执行?似乎'嵌套'将是一个列表 - 在这种情况下添加另一层递归 - 或者它是一个数字,你得到一个TypeError.
任何对此的帮助都将非常感激...特别是,我喜欢在事件链中走动,因为flatten()处理一个简单的例子:
list(flatten([[1,2],3]))
Run Code Online (Sandbox Code Playgroud)