当我需要在列表中添加几个相同的项目时,我使用list.extend:
a = ['a', 'b', 'c']
a.extend(['d']*3)
Run Code Online (Sandbox Code Playgroud)
结果
['a', 'b', 'c', 'd', 'd', 'd']
Run Code Online (Sandbox Code Playgroud)
但是,如何与列表理解类似?
a = [['a',2], ['b',2], ['c',1]]
[[x[0]]*x[1] for x in a]
Run Code Online (Sandbox Code Playgroud)
结果
[['a', 'a'], ['b', 'b'], ['c']]
Run Code Online (Sandbox Code Playgroud)
但我需要这个
['a', 'a', 'b', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
对于
A=[1,2,3]
我想得到
B=['r1','t1','r2','t2','r3','t3']
我知道这是很容易获得['r1','r2','r3']通过
['r'+str(k) for k in A]
如上所示,我如何通过一个线路循环获得B?
非常感谢.
以下是否存在1行等效(使用列表理解):
a = []
for i in range(6):
a.extend(((-i,i,0,2),(-i-1,i,0,6)))
a = tuple(a)
Run Code Online (Sandbox Code Playgroud)
我在想类似的东西
tuple(((-i,i,0,2),(-i-1,i,0,6)) for i in range(6))
Run Code Online (Sandbox Code Playgroud)
但这给了:
(((0, 0, 0, 2), (-1, 0, 0, 6)),
((-1, 1, 0, 2), (-2, 1, 0, 6)),
((-2, 2, 0, 2), (-3, 2, 0, 6)),
((-3, 3, 0, 2), (-4, 3, 0, 6)),
((-4, 4, 0, 2), (-5, 4, 0, 6)),
((-5, 5, 0, 2), (-6, 5, 0, 6)))
Run Code Online (Sandbox Code Playgroud)
这不是我想要的.
期望的输出
((0, 0, 0, 2),
(-1, 0, 0, 6),
(-1, 1, 0, …Run Code Online (Sandbox Code Playgroud) 例如,这个片段:
out = []
for foo in foo_list:
out.extend(get_bar_list(foo)) # get_bar_list return list with some data
return out
Run Code Online (Sandbox Code Playgroud)
如何使用列表理解来缩短此代码?