通过一个过程,我希望得到一系列包含字符串的列表。其中一些字符串将包含一个名为“foo”的子字符串。在所有这些位置,我想在此之前插入另一个字符串项“bar”。
如果
list1 = ['alpha', 'beta', 'gamma' , 'Donald-foo' , 'omega', 'foo Obama', 'football']
我想创建 list2
list2 = ['alpha', 'beta', 'gamma' , 'bar', 'Donald-foo' , 'omega', 'bar', 'foo Obama', 'bar', 'football']
到目前为止我已经尝试过:
list3 = [i for i,s in enumerate(list1) if 'foo' in s]
这给了我
list3 = [3, 5, 6]
for k in reversed(list3):
list1.insert(k,'bar')
这可以完成工作,但感觉是一种非常笨拙和痛苦的方法。有更优雅的方法吗?
最佳答案
这会起作用:
[i for s in [*map(lambda x: (['bar', x] if 'foo' in x else [x]), list1)] for i in s]
['alpha',
'beta',
'gamma',
'bar',
'Donald-foo',
'omega',
'bar',
'foo Obama',
'bar',
'football']
对于 list1
中的所有项目,如果找到 'foo'
,则返回 ['bar', 'item']
,或者只是返回['item']
如果不是。然后我就扁了。这是未展平的部分:
[*map(lambda x: (['bar', x] if 'foo' in x else [x]), list1)]
[['alpha'],
['beta'],
['gamma'],
['bar', 'Donald-foo'],
['omega'],
['bar', 'foo Obama'],
['bar', 'football']]
关于Python:每次出现其他项目时,都会在列表中插入一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62698068/