有没有办法通过列表理解来做到这一点?

问题描述 投票:0回答:1

我有一个看起来像这样的列表:

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]

但这变得相当难以阅读。有更好的方法吗?

python list-comprehension
1个回答
0
投票

如果列表理解明显降低可读性,则无需使用。

就用你提到的方式:

for element in data:
    result += [f'${len(element)}', element]
© www.soinside.com 2019 - 2024. All rights reserved.