我有一个看起来像这样的列表
test = ['A','B','C','D D','E E','F F']
我想test变成下面的(也就是把空格去掉)
test = ['A', 'B', 'C', 'DD', 'EE', 'FF']
我在 Python 中使用了列表理解来实现这一点:
>>> [re.sub(' ','',i) for i in test]
['A', 'B', 'C', 'DD', 'EE', 'FF']
我的问题是 - 如果我明确不希望 re.sub(' ','',i) 在我列表的前三个元素上运行怎么办?我只希望 re.sub 函数在“DD”、“EE”和“FF”上运行。
这种方式有效率吗?我知道列表理解会占用内存,因为 Python 会生成副本。
test2[3:] = [re.sub(' ','',i) for i in test[3:]]
或者我应该像这样循环遍历我想修改的测试值:
for i in range(3,len(test)):
print i
test[i] = re.sub(' ','',test[i])
请您参考如下方法:
首先,听起来您过早地进行了优化。
其次,您可以通过单个列表理解来表达您的要求:
In [5]: test = ['A','B','C','D D','E E','F F']
In [6]: [t if i < 3 else re.sub(' ', '', t) for (i, t) in enumerate(test)]
Out[6]: ['A', 'B', 'C', 'DD', 'EE', 'FF']
最后,我的建议是首先关注正确性,然后才是可读性。实现这些后,分析代码以查看瓶颈所在,然后才针对性能进行优化。
