我正在寻找一种“好”的方式来处理一个列表,其中一些元素需要扩展为更多的元素(只有一次,结果没有扩展).
标准的迭代方式是:
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)
但这也不是“正确”.
有没有其他明确的方法来做到这一点?
最佳答案 如果您不需要在生成的列表中进行随机访问,则还可以使用write a generator.
def iter_new_list(old_list):
for x in old_list:
if needs_expanding(x):
for y in expand(x):
yield y
else:
yield x
new_list = list(iter_new_list(old_list))
这在功能上等同于您的第二个示例,但在您的实际情况中它可能更具可读性.
此外,Python编码标准禁止使用小写-L作为变量名,因为它几乎与数字1无法区分.