列表中的替换元素

时间:2018-03-26 08:40:15

标签: python

我试图替换列表中的元素

# the raw data 
square = ['(', ')', '.', '^', '-']
# the result I want
square = ['[', ']', '.', '^', '-']

使用removeinsert

的方法执行多个步骤
    In [21]: square.remove('(')
    In [22]: square.remove(')')
    In [23]: square.insert(0, '[')
    In [24]: square.insert(1, ']')
    In [25]: square
    Out[25]: ['[', ']', '.', '^', '-']

如何以一种直截了当的方式解决这个问题?

3 个答案:

答案 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))))
>>>['[', ']', '.', '^', '-']