在下面的函数中,我需要排序" items"基于列表" rank"这是在函数内计算的。但我需要在适当的位置进行,而不是创建另一个对象。下面的代码进行排序,但会创建一个新的引用。换句话说,之前和之后的ID(项目)是不同的。
def collection_modifyitems(items):
# calculate 'rank'
print(id(items))
items = [x for (y, x) in sorted(zip(test_rank, items), key=lambda s: s[0])]
print(id(items))
如何在不创建新引用的情况下执行此操作或在适当的位置执行此操作?
答案 0 :(得分:4)
使用[:]
(切片整个列表)更改旧列表的值,而不是创建新的引用:
items[:] = [x for (y, x) in sorted(zip(test_rank, items), key=lambda s: s[0])]