【发布时间】:2010-02-02 16:42:25
【问题描述】:
我正在寻找一种“不错”的方式来处理列表,其中一些元素需要扩展为更多元素(仅一次,结果不扩展)。
标准的迭代方式是:
i=0
while i < len(l):
if needs_expanding(l[i]):
new_is = expand(l[i])
l[i:i] = new_is
i += len(new_is)
else:
i += 1
这很丑陋。我可以将内容重写到一个新列表中:
nl = []
for x in l:
if needs_expanding(x):
nl += expand(x)
else:
nl.append(x)
但它们似乎都太长了。或者我可以简单地做 2 遍,然后将列表展平:
flatten(expand(x) if needs_expanding(x) else x for x in l)
# or
def try_expanding(x)....
flatten(try_expanding(x) for x in l)
但这也不“正确”。
还有其他明确的方法吗?
【问题讨论】:
-
我觉得第二版已经够清晰了。
-
@KennyTM:我通常会使用最后一个。只是想看看人们还能想出什么/会在现实生活中使用/看到代码。