在字符串列表中的特定元素之前和之后插入元素

时间:2015-12-07 20:04:21

标签: python list iteration

是否可以在出现特定字符串时插入列表。 例如:

List=['north','south','east','west','south','united']

所以每次字符串“南”时如果显示,列表将在列表中的元素南面之前插入项'canada'

Results
List=['north','canada','south','east','west','canada','south','united']
编辑:我为不够具体而道歉。我需要它来寻找特定的角色。

List1=['north','<usa>23<\usa>','east','west','<usa>1942<\usa>','united']
Result=['north','canada', '<usa>23<\usa>','east','west','canada','<usa>1942<\usa>','united']

5 个答案:

答案 0 :(得分:4)

简单的答案:

def blame_canada(old_list): 
    new_list = []
    for each in old_list:
        if each == 'south':
            new_list.append('canada')
        new_list.append(each)
    return new_list

答案 1 :(得分:4)

为了能够将列表中的元素放置在特定位置,您需要列出insert函数。

<list>.insert(<position>, <value>)

例如,如果您有一个包含以下内容的列表:

a = [2, 4, 6, 8, 12]

想要在列表中添加10但保持当前订单,您可以这样做:

a.insert(4, 10)

并将获得:

[2, 4, 6, 8, 10, 12]

修改

在每个南方之前插入&#39;做:

for i in range(len(<list>)):
    if <list>[i] == 'south':
        <list>.insert(i, 'canada')

答案 2 :(得分:2)

这是一个高性能的列表理解方法。

首先,它生成一个包含“south”的索引列表。

然后,它使用索引+索引顺序作为插入点(以考虑循​​环中的先前插入),为此问题提供了一个简单,快速且易于遵循的pythonic解决方案:

List = ['north','south','east','west','south','united']
souths = [idx for idx, val in enumerate(List) if val == 'south']
for i, idx in enumerate(souths):
    List.insert(idx+i, 'canada')

答案 3 :(得分:2)

使用简单的循环:

L = ['north','south','east','west','south','united']
res = []
for entry in L:
    if entry == 'south':
        res.append('canada')
    res.append(entry)
L[:] = res

最后一行将结果复制到原始列表中。这使它等同于修改原始列表的append。使用大量insert调用会使大型列表变得非常慢,因为它需要为每个插入构建整个列表。

答案 4 :(得分:0)

你可以使用一个简单的单行使用双列表理解(使用像你定义的List):

>>> [inner for outer in [(['canada',x] if x == 'south' else [x]) for x in List] for inner in outer]
['north', 'canada', 'south', 'east', 'west', 'canada', 'south', 'united']

答案由两部分组成:

  • 内部列表理解:[(['canada',x] if x == 'south' else [x]) for x in List]迭代列表并返回列表列表。如果x位于南方,则会发出['canada','south'],否则会发出[x]。结果如下:

    >>> [(['canada',x] if x == 'south' else [x]) for x in List]
    [['north'], ['canada', 'south'], ['east'], ['west'], ['canada', 'south'], ['united']]
    

    给定列表。

  • 接下来,使用this approach展开结果。