是否可以在出现特定字符串时插入列表。 例如:
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']
答案 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展开结果。