复制一个列表并在一行中设置一个元素?

时间:2014-03-11 05:42:57

标签: python

在我的代码中,我复制了一个列表,然后将其中一个副本的元素设置为原始元素之外的其他元素。这个操作可以在一行完成,最好不使用过滤列表理解吗?您可能会猜到以下代码

>>> a = [1,2,3,4]
>>> b = list(a)[0] = 5
>>> b

生成5。无论如何,b可以指向[5,2,3,4]吗?我知道这不是一个很大的节省空间,而我真的只是想知道它是否可以干净利落地完成,而无需使用理解来明确创建副本。

2 个答案:

答案 0 :(得分:3)

试试这个:

b = [e if i != 0 else 5 for i, e in enumerate(a)]

或者:

b = [5] + a[1:]

答案 1 :(得分:0)

是的,使用辅助功能:

def with_replaced_element(l, i, x):
    l2 = l[:]
    l[i] = x
    return l2

辅助函数是否值得,取决于你使用它的次数。如果这是您的代码需要做很多事情的事情,并且它会使代码更清晰,有一个表达式而不是多个语句,那么就去做吧。