python - 使用 python 中的列表推导就地修改列表的一部分

标签 python list

我有一个看起来像这样的列表

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/

相关文章:

python - 如何在 OSX 上安装 python?

python - 从异步函数调用同步函数

list - 具有多个相同元素的列表的排列Prolog

pythonic方式替换列表列表的内容?

list - 查找串联的参数只是使用提升或注入(inject)的索引查找整个串联

python - 使用 tensorflow 理解 LSTM 模型进行情感分析

python - 如何在 Windows 操作系统中升级/卸载 distutils 软件包 (PyYAML)

python - 写入文件时导致此垃圾的原因是什么

python - 从字典列表到 np 数组数组,反之亦然

java - 列出函数中接收到的类似对象