我试图替换列表中的元素
# the raw data
square = ['(', ')', '.', '^', '-']
# the result I want
square = ['[', ']', '.', '^', '-']
使用remove
和insert
In [21]: square.remove('(')
In [22]: square.remove(')')
In [23]: square.insert(0, '[')
In [24]: square.insert(1, ']')
In [25]: square
Out[25]: ['[', ']', '.', '^', '-']
如何以一种直截了当的方式解决这个问题?
答案 0 :(得分:11)
字典非常适合这种事情。使用列表推导来迭代并查找替换字典中的每个元素,使用.get
使其默认为当前项。
replacements = {'(': '{', ')': '}'}
square = [replacements.get(elem, elem) for elem in square]
答案 1 :(得分:5)
最简单的解决方案是,如果您准确知道要更改的元素的索引,则使用列表索引:
square = ['(', ')', '.', '^', '-']
square[0] = '['
square[1] = ']'
print square
>>> ['[', ']', '.', '^', '-']
另一方面,如果你不确定你的括号'您可以使用enumerate()在列表中的位置,并且在单个循环中,您将能够访问循环元素的索引和值:
square = ['(', ')', '.', '^', '-']
for index, element in enumerate(square):
if element == '(':
square[index] = '['
if element == ')':
square[index] = ']'
print square
>>> ['[', ']', '.', '^', '-']
在我看来,这些是最直接的方式。
如果我可以建议,下一步是使用列表(和/或字典)理解更多Pythonic。
检查Daniel Roseman的答案中的宝石以获得一个想法。
答案 2 :(得分:2)
dict_ = {'(':'[',')':']'}
data = [dict_[val] if val in dict_ else val for val in square ]
>>>['[', ']', '.', '^', '-']
使用re模块:
import re
print(list(re.sub(r'\(\)','\[\]',''.join(square))))
>>>['[', ']', '.', '^', '-']