在循环时查找并替换列表中的字符串值

时间:2019-05-20 19:30:34

标签: python list-comprehension enumerate

我有一个包含项目名称的列表(item01,item02等) 我想删除一些旧项目并在列表中添加新项目

我尝试了以下代码:

isPalindrome

代码输出:

add_items = 'item22,item23'.split(',')
rmv_items = 'item01,item02'.split(',')
cur_kit_compon = ['item01', 'item02', 'item03', 'item4', 'item5']

for index, x in enumerate(add_items):
    new_kit_compon = [y.replace(rmv_items[index], x) for y in cur_kit_compon]

print('-------------------------')
print(new_kit_compon)

问题: 该代码仅删除并添加了1个项目,而不是2个项目

所需的输出:

['item01', 'item23', 'item03', 'item4', 'item5']

谢谢您的帮助

5 个答案:

答案 0 :(得分:4)

您可以构建将要删除的项目映射到其替换项的字典,然后使用该字典在列表中查找项目的替换项。

add_items = 'item22,item23'.split(',')
rmv_items = 'item01,item02'.split(',')

replacements = dict(zip(rmv_items, add_items))

cur_kit_compon = ['item01', 'item02', 'item03', 'item4', 'item5']
res = [replacements.get(item, item) for item in cur_kit_compon]
# ['item22', 'item23', 'item03', 'item4', 'item5']

答案 1 :(得分:1)

在没有理由的情况下,您将列表理解嵌套在for循环中。代替

for index, x in enumerate(add_items):
    new_kit_compon = [y.replace(rmv_items[index], x) for y in cur_kit_compon]

只要做

new_kit_compon = cur_kit_compon[:]         # create a copy of original list, so as not to modify it
for add, rmv in zip(add_items, rmv_items): # go through the added and removed items together
    idx = new_kit_compon.index(rmv)        # find the index of the item to replace
    new_kit_compon[idx] = add              # replace it
print(new_kit_compon)

答案 2 :(得分:1)

为什么不简单地执行以下操作?如果您的想法是获取包含更新项目的列表

add_items+[item for item in cur_kit_compon if item not in rmv_items]

输出

['item22', 'item23', 'item03', 'item4', 'item5']

答案 3 :(得分:0)

您要替换while中的值,同时将其保存到每个循环的新列表中。旧列表(cur_kit_compon)保持不变。例如:

add_items = 'item22,item23'.split(',')
rmv_items = 'item01,item02'.split(',')
cur_kit_compon = ['item01', 'item02', 'item03', 'item4', 'item5']

for index, x in enumerate(add_items):
    new_kit_compon = [y.replace(rmv_items[index], x) for y in cur_kit_compon]
    print('cur_kit_compon: ', cur_kit_compon)

结果:

print('-------------------------')
print(new_kit_compon)
cur_kit_compon:  ['item01', 'item02', 'item03', 'item4', 'item5']
cur_kit_compon:  ['item01', 'item02', 'item03', 'item4', 'item5']
-------------------------
['item01', 'item23', 'item03', 'item4', 'item5']

答案 4 :(得分:0)

您可以遍历cur_kit_compon并根据add_items/rmv_items找到的索引替换项目:

add_items = 'item22,item23'.split(',')
rmv_items = 'item01,item02'.split(',')
cur_kit_compon = ['item01', 'item02', 'item03', 'item4', 'item5']
for index, item in enumerate(cur_kit_compon):
    if item in rmv_items:
        i = rmv_items.index(item)
        cur_kit_compon[index] = add_items[i]
cur_kit_compon