繁体   English   中英

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

[英]Python: Insert an item in a list every time some other item appears

虽然是一个过程,但我希望有一系列包含字符串的列表。 其中一些字符串将包含一个名为“foo”的 substring。 在所有这些位置,我想在此之前插入另一个字符串项 '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')

这可以完成工作,但对于 go 来说,这感觉像是一种非常笨拙和痛苦的方式。 有没有更优雅的方法?

这会起作用:

[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']]

这里是 go:

list2 = []
for item in list1:
    if 'foo' in item:
        list2.append('bar')
    list2.append(item)
print(list2)

## -- End pasted text --
['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 将是:

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']

只需在x中存在 'foo' 的地方执行一个循环,将x替换为['bar',x]并最终展平以去除多余的括号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM