Skip to main content
 首页 » 编程设计

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

2025年05月04日14落叶无声

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

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'] 

最后,我的建议是首先关注正确性,然后才是可读性。实现这些后,分析代码以查看瓶颈所在,然后才针对性能进行优化。