Учитывая список, который содержит как строки, так и значения None, в которые некоторые строки имеют встроенные символы новой строки, я буду sh разбивать строки с символами новой строки на несколько строк и возвращать плоский список.
Я написал код, чтобы сделать это, используя функцию генератора, но код довольно громоздкий, и мне интересно, возможно ли сделать это более кратко, используя понимание списка или функцию из модуля itertools . itertools.chain
, похоже, не может отказаться от итерации любых не повторяемых элементов.
def expand_newlines(lines):
r"""Split strings with newlines into multiple strings.
>>> l = ["1\n2\n3", None, "4\n5\n6"]
>>> list(expand_newlines(l))
['1', '2', '3', None, '4', '5', '6']
"""
for line in lines:
if line is None:
yield line
else:
for l in line.split('\n'):
yield l