我有一个字符串列表a和一个元组列表b,其中:
a=['from src1 to dest2','from src3 to dest4','from src5 to dest6']
b=[['destb','dest2'],['destd','loc4'],['destf','dest6'],['desth','dest8']]
a和b可以变化长度并且不相等。
我想遍历a,检查“dest”是否与每个元组中的第一个字符串匹配,如果匹配,则将其替换为第二个字符串,并将其附加到新列表中。 如果未找到匹配项,则要将字符串未更改地附加到列表中。
因此,它应该如下所示:
newlist=['from src1 to destb','from src3 to destd','from src5 to destf']
我的当前代码如下:
for source_dest_statement in source_dest_statements:
for i,j in in source_dest_tuple:
if j in source_dest_statement:
amended_source_dest_statements.append('SOMETHING HAS CHANGED!')
amended_source_dest_statements.append(re.sub(j,i,source_dest_statement))
else:
amended_source_dest_statements.append(source_dest_statement)
正如预期的那样,当没有匹配项时,这会重复追加当前迭代的source_dest_statement,而我需要它们只出现与原始列表中相同的次数。最简单的修复此行为的方法是什么?
编辑:我将尝试解释我正在尝试解决的问题:
我有一个防火墙配置,其中有许多NAT语句。这些语句在更新的代码版本中已更改,因此使用映射地址的目标地址现在改用真实地址。
我的元组列表是真实地址到映射地址对的列表。例如 [(realaddress1, mappedaddress1), (r2, m2), (r3, m3)] 等等。
我有旧的访问列表规则库,我想通过并替换所有对映射地址的引用,以使用相应的真实地址。
我正在尝试做的事情:
- 遍历访问列表规则。 - 如果找到映射地址匹配项,则修改规则,追加到列表中,并插入一个注释,说明已修改该规则。 - 如果没有找到匹配项,则将现有规则附加到列表中。
b
不是一个元组列表,而是一个列表的列表。 - Joe T. Boka