在我的代码中,我复制了一个列表,然后将其中一个副本的元素设置为原始元素之外的其他元素。这个操作可以在一行完成,最好不使用过滤列表理解吗?您可能会猜到以下代码
>>> a = [1,2,3,4]
>>> b = list(a)[0] = 5
>>> b
生成5
。无论如何,b
可以指向[5,2,3,4]
吗?我知道这不是一个很大的节省空间,而我真的只是想知道它是否可以干净利落地完成,而无需使用理解来明确创建副本。
答案 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
辅助函数是否值得,取决于你使用它的次数。如果这是您的代码需要做很多事情的事情,并且它会使代码更清晰,有一个表达式而不是多个语句,那么就去做吧。