我有一个看起来像这样的列表:
data = ['1', '12', '123']
我想生成一个新列表,如下所示:
result = ['$1', '1', '$2', '12', '$3', '123']
其中
$
符号后面的数字是下一个元素的长度。
最简单的方法是使用
for
循环:
result = []
for element in data:
result += [f'${len(element)}'] + [element]
但我想知道是否可以以更优雅的方式做到这一点 - 也许可以使用列表理解?
我可以做
result = [[f'${len(e)}', e] for e in data]
但这会产生一个列表列表:
[['$1', '1'], ['$2', '12'], ['$3', '123']]
我可以用类似的东西来压平它
result = sum([[f'${len(e)}', e] for e in data], [])
甚至
result = [x for xs in [[f'${len(e)}', e] for e in data] for x in xs]
但这变得相当难以阅读。有更好的方法吗?
如果列表理解明显降低可读性,则无需使用。
就用你提到的方式:
for element in data:
result += [f'${len(element)}', element]