list.extend 和列表推导式
当我需要在列表中添加几个相同的项目时,我会使用 list.extend 方法:
a = ['a', 'b', 'c']
a.extend(['d']*3)
结果
['a', 'b', 'c', 'd', 'd', 'd']
但是,如何用列表推导式做类似的事情呢?
a = [['a',2], ['b',2], ['c',1]]
[[x[0]]*x[1] for x in a]
结果
[['a', 'a'], ['b', 'b'], ['c']]
不过我需要的是这个
['a', 'a', 'b', 'b', 'c']
有什么想法吗?
6 个回答
6
在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够好,或者是我们对某些概念理解得不够透彻。比如,有人可能在使用某个库的时候,发现它的功能和自己想的不太一样,这时候就需要仔细查看文档,看看这个库是怎么设计的,或者是有没有其他人遇到过类似的问题。
另外,调试也是一个很重要的环节。当代码出现错误时,我们需要一步一步地找出问题所在。可以通过打印一些变量的值,或者使用调试工具来帮助我们理解代码的运行情况。
总之,编程的过程就是不断学习和解决问题的过程。遇到困难时,不要气馁,多查资料,多请教别人,慢慢就能掌握这些技能。
>>> a = [['a',2], ['b',2], ['c',1]]
>>> [i for i, n in a for k in range(n)]
['a', 'a', 'b', 'b', 'c']
16
一种使用 itertools 的方法:
import itertools
def flatten(it):
return itertools.chain.from_iterable(it)
pairs = [['a',2], ['b',2], ['c',1]]
flatten(itertools.repeat(item, times) for (item, times) in pairs)
# ['a', 'a', 'b', 'b', 'c']
61
堆叠的链表。
[y for x in a for y in [x[0]] * x[1]]