擅长:python、mysql、java
<pre><code>def isiter(x):
try:
iter(x)
return True
except TypeError:
return False
def _flatten(x, reduce=iter):
for i in x:
if isiter(i):
r = reduce((j for j in _flatten(i, reduce=reduce)))
if isiter(r):
yield from r
else:
yield r
else:
yield i
</code></pre>
<p>现在你可以说</p>
<pre><code>def mean(x):
l = list(x)
return sum(l)/len(l)
l = [1, [2, [3, [5, [5]]]]]
list(_flatten(l, reduce=mean))
>>> [1, 3.0]
</code></pre>
<p>或者</p>
<pre><code>mean(flatten(l, reduce=mean))
>>> 2.0
</code></pre>
<p>编辑:</p>
<p>如果您真的只需要一个函数:</p>
<pre><code>def flatten(x, reduce=iter):
return reduce(_flatten(x, reduce=reduce))
</code></pre>