使用临时列表修改字符串的 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_list
或 temp_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
我有一个几千个字符长的字符串,包含大约 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_list
或 temp_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