使用临时列表修改字符串的 Pythonic 方法

Pythonic way of modifiying a string with a temporary list

我有一个几千个字符长的字符串,包含大约 100 个 \n,打印时将其分开。我正在删除包含某些子字符串和某些单个字符的所有行。

这部分已经完成,但我很好奇最 pythonic 的方法是什么,并且假设我选择的方法是正确的,如果临时列表有适当的命名约定。

active_config = active_config.split('\n')

for i, elem in enumerate(active_config):
    # Delete entire line based off match
    if "cmdStatus=" in elem or "<?xml" in elem:
        active_config.remove(elem)

    #Delete individual char based off match
    elem = elem.replace("\r","")
# Delete last line if it is '*'
if active_config[-1] == "*":
    del active_config[-1]

active_config = '\n'.join(active_config)

我选择将字符串 active_config 覆盖为列表,然后在删除某些元素完成后再次将其覆盖为字符串。

由于该列表仅用于删除几行和单个字符,而从未在其他地方使用过,因此我应该如何称呼它是否有特殊约定?也许称它为 active_config_listtemp_active_config 甚至只是 temp.

这是针对此类问题的 pythonic 解决方案,使用 filter:

active_config = """this is an
example which contains
words like
cmdStatus=
cmdStatus2
or other
weird <?lxml
tags
"""

lines = active_config.splitlines()
tokens = ["cmdStatus=", "<?lxml"]
print '\n'.join(filter(lambda x: not any(w in x for w in tokens), lines))

几个列表理解也可以做到这一点:

active_config = active_config.split('\n')

temp_list = [z for z in active_config if "cmdStatus=" in z or "<?xml" in z]

if temp_list[-1] == "*":
    temp_list = "\n".join([x.replace("\r", "") for x in temp_list[:-1]])

#Do whatever you need to do with temp_list here