我有一个看起来像这样的列表
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']
最后,我的建议是首先关注正确性,然后才是可读性。实现这些后,分析代码以查看瓶颈所在,然后才针对性能进行优化。
关于python - 使用 python 中的列表推导就地修改列表的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21122382/