Python:每次出现其他项目时,在列表中插入一个项目

Python:每次出现其他项目时,在列表中插入一个项目,python,list,Python,List,虽然是一个过程,但我希望有一系列包含字符串的列表。这些字符串中的一些将出现在名为“foo”的子字符串中。在所有这些位置,我想在此之前插入另一个字符串项“bar” 所以如果 我想创建列表2,它是 list2 = ['alpha', 'beta', 'gamma' , 'bar', 'Donald-foo' , 'omega', 'bar', 'foo Obama', 'bar', 'football'] 到目前为止,我已经尝试过: list3 = [i for i,s in enumerate(

虽然是一个过程,但我希望有一系列包含字符串的列表。这些字符串中的一些将出现在名为“foo”的子字符串中。在所有这些位置,我想在此之前插入另一个字符串项“bar”

所以如果

我想创建列表2,它是

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')
这确实可以,但感觉是一种非常笨拙和痛苦的方式。有更优雅的方法吗?

给你:

list2=[]
对于列表1中的项目:
如果项目中的“foo”:
列表2.append('bar')
列表2.追加(项目)
打印(列表2)
##--结束粘贴的文本--
['alpha'、'beta'、'gamma'、'bar'、'donaldfoo'、'omega'、'bar'、'foo Obama'、'bar'、'foo foo foo football']
这将起作用:

[i for s in [*map(lambda x: (['bar', x] if 'foo' in x else [x]), list1)] for i in s]
对于
列表1
中的所有项目,如果找到
'foo'
,则返回
['bar','item']
,如果找不到,则返回
['item']
。然后我就变平了。以下是未经研磨的部分:

[*map(lambda x: (['bar', x] if 'foo' in x else [x]), list1)]

您可以通过以下方式轻松实现这一点:

list1 = ['alpha', 'beta', 'gamma' , 'Donald-foo' , 'omega', 'foo Obama', 'football']
list2 = []

for words in list1:
    if 'foo' in words:
        list2.append('bar')
    list2.append(words)
清单2将是:

list2 = ['alpha', 'beta', 'gamma' , 'bar', 'Donald-foo' , 'omega', 'bar', 'foo Obama', 'bar', 'football']

另一种简单的列表理解方法(单行单循环):


只需在
x
中存在“foo”的地方做一个循环,用
['bar',x]
替换
x
,最后将其展平以去掉多余的括号。

回答不错+1。
[['alpha'],
 ['beta'],
 ['gamma'],
 ['bar', 'Donald-foo'],
 ['omega'],
 ['bar', 'foo Obama'],
 ['bar', 'football']]
list1 = ['alpha', 'beta', 'gamma' , 'Donald-foo' , 'omega', 'foo Obama', 'football']
list2 = []

for words in list1:
    if 'foo' in words:
        list2.append('bar')
    list2.append(words)
list2 = ['alpha', 'beta', 'gamma' , 'bar', 'Donald-foo' , 'omega', 'bar', 'foo Obama', 'bar', 'football']
from django.contrib.admin.utils import flatten
list1 = flatten([['bar',x] if 'foo' in x else x for x in list1])

list1
#['alpha', 'beta', 'gamma', 'bar', 'Donald-foo', 'omega', 'bar', 'foo Obama', 'bar', 'football']