Py学习  »  Python

Python列表理解:从2个列表构建一个列表

macxpat • 4 年前 • 1853 次点击  

这个代码

colors = ["#F1A141", "#52D987", "#12A3FF", "#FF3F94", "#564DA6"]
skills = [3, 4, 4, 2, 3]
palette = [(item for i in range(skills[index])) for (index, item) in enumerate(colors)]

不返回错误,但返回错误列表项

[<generator object <listcomp>.<genexpr> at 0x7f302eac9650>, <generator object <listcomp>.<genexpr> at 0x7f302eac9550>, ... ]

我的错在哪里?

编辑: 预期输出是一个包含3个字符的列表 "#F1A141" 项目后接4 "#52D987" 物品等等。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130515
文章 [ 1 ]  |  最新文章 4 年前
Mark
Reply   •   1 楼
Mark    4 年前

这是一个生成器表达式: (item for i in range(skills[index]) 如果你想要一个列表列表,你需要使用 [] 在理解力之内。

考虑到所需的输出,使用 zip 这两个列表并避免 range .然后嵌套理解以使其平坦:

colors = ["#F1A141", "#52D987", "#12A3FF", "#FF3F94", "#564DA6"]
skills = [3, 4, 4, 2, 3]

[c for color, n in zip(colors, skills) for c in [color] * n]

生产:

['#F1A141',
 '#F1A141',
 '#F1A141',
 '#52D987',
 '#52D987',
 '#52D987',
 '#52D987',
 '#12A3FF',
 '#12A3FF',
 '#12A3FF',
 '#12A3FF',
 '#FF3F94',
 '#FF3F94',
 '#564DA6',
 '#564DA6',
 '#564DA6']