gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:40 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com