Python: 如何就地改变列表的每个元素
Python: How to change each element of a list in place
假设我有一个列表:
sentence = ['This','is','a','sentence']
我想在除第一个元素之外的每个元素前面添加一个 space。基本上,预期的结果是这样的:
sentence = ['This', ' is', ' a', ' sentence']
我试过这样做:
for word in sentence[1:]:
word = ' ' + word
但是,这个不会改变 sentence
中的元素(为什么?)。
我可以像这样写一些丑陋的代码:
for i in range(1, len(sentence)):
sentence[i] = ' ' + sentence[i]
我认为这个可行,但这不是一种优雅的方式...
最符合 Pythonic 的方法是什么?
这是就地完成的:
In [206]: sentence = ['This','is','a','sentence']
In [207]: for i,word in enumerate(sentence[1:],1):
.....: sentence[i] = ' '+word
.....:
In [208]: sentence
Out[208]: ['This', ' is', ' a', ' sentence']
这个方便的单行线不能就地完成:
In [209]: sentence = ['This','is','a','sentence']
In [210]: sentence = [sentence[0]] + [' '+word for word in sentence[1:]]
In [211]: sentence
Out[211]: ['This', ' is', ' a', ' sentence']
假设我有一个列表:
sentence = ['This','is','a','sentence']
我想在除第一个元素之外的每个元素前面添加一个 space。基本上,预期的结果是这样的:
sentence = ['This', ' is', ' a', ' sentence']
我试过这样做:
for word in sentence[1:]:
word = ' ' + word
但是,这个不会改变 sentence
中的元素(为什么?)。
我可以像这样写一些丑陋的代码:
for i in range(1, len(sentence)):
sentence[i] = ' ' + sentence[i]
我认为这个可行,但这不是一种优雅的方式...
最符合 Pythonic 的方法是什么?
这是就地完成的:
In [206]: sentence = ['This','is','a','sentence']
In [207]: for i,word in enumerate(sentence[1:],1):
.....: sentence[i] = ' '+word
.....:
In [208]: sentence
Out[208]: ['This', ' is', ' a', ' sentence']
这个方便的单行线不能就地完成:
In [209]: sentence = ['This','is','a','sentence']
In [210]: sentence = [sentence[0]] + [' '+word for word in sentence[1:]]
In [211]: sentence
Out[211]: ['This', ' is', ' a', ' sentence']