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

用临时列表修改字符串的Pythonic方法,python,naming-conventions,Python,Naming Conventions,我有一个几千字符长的字符串,包含大约100个\n,打印时将其分隔开。我正在删除任何包含某些子字符串和某些单独字符的行 这一部分已经完成了,但我很好奇,做这件事的最python的方式是什么,假设我选择的方法是正确的,那么临时列表是否有合适的命名约定 active_config = active_config.split('\n') for i, elem in enumerate(active_config): # Delete entire line based off match

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

这一部分已经完成了,但我很好奇,做这件事的最python的方式是什么,假设我选择的方法是正确的,那么临时列表是否有合适的命名约定

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\u config=active\u config.split('\n')
对于i,枚举中的元素(活动配置):
#删除基于不匹配的整行

如果“cmdStatus=”在elem或“中,则以下是针对此类问题的pythonic解决方案:

active_config=“”这是一个
示例,其中包含
像这样的话
cmdStatus=
cmdStatus2
或其他

怪异这里有一个针对此类问题的pythonic解决方案,使用:

active_config=“”这是一个
示例,其中包含
像这样的话
cmdStatus=
cmdStatus2
或其他

奇怪的一些列表理解也可以做到这一点:

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
active\u config=active\u config.split('\n')

如果“cmdStatus=”在z或“中,则temp\u list=[z代表活动配置中的z]两个列表理解也可以:

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
active\u config=active\u config.split('\n')

如果“cmdStatus=”在z中或"在迭代列表时修改列表是一个坏主意,因为它会偏离您在列表中的位置。此外,
remove
从列表中删除元素的速度非常慢,因为它必须重新定位元素。构建一个新列表,而不是从现有列表中删除。此外,您不应该测试列表中的每一行以查看如果它是最后一行,只需在循环之外执行这些操作。然后您就可以使用
.join
向后调用。它应该是
分隔符\u string.join(字符串列表)
@PM2Ring,你说得对。谢谢你指出这一点。在你迭代列表时修改列表是个坏主意,因为它会使你失去在列表中的位置。此外,
删除
是从列表中删除元素的一种非常慢的方法,因为它必须重新定位元素。构建一个新列表,而不是从现有列表中删除ng one。另外,你不应该测试列表中的每一行,看它是否是最后一行,只需在循环之外做这些事情。你有你的
.join
向后调用。它应该是
分隔符字符串。join(字符串列表)
@PM2Ring,你是对的。谢谢你指出这一点。啊,是的,我知道lambda列表的理解,但经常忘记使用它!并回答这个问题的另一部分。像
行这样的临时变量是否比我重复使用同一个变量名并重复编写两次的方法更可取?@BrianC我编辑了我的代码,而不是using split('\n')我建议您改用splitlines()。关于保留或重用var名称,我更愿意保留我的原始输入用于其他用途。除非您担心内存问题,这不太可能:)我确实在其他地方使用原始输入var,正如我所说,我基本上是这样做的
a=“some\nstuff”
然后
a=a.split(“\n”)
,修改a的元素,然后加入(a)
。所以这里没有约定,只有偏好?啊,是的,我知道lambda列表理解,但经常忘记使用它!并回答这个问题的另一部分。像
这样的临时变量是否比我重复使用同一个变量名并重复编写两次的方法更可取?@BrianC我编辑了我的代码,而不是使用spl它('\n')我建议您改用splitlines()。关于保留或重用var名称,我更愿意保留我的原始输入用于其他用途。除非您担心内存问题,这不太可能:)我确实在其他地方使用原始输入var,正如我所说,我基本上是这样做的
a=“some\nstuff”
然后
a=a.split(“\n”)
,修改a的元素,然后
a=“\n”。加入(a)
。所以这里没有约定,只是首选项?