我有这个简单的Python 2.7函数:
SimpleRabbitListenerContainerFactoryConfigurer
然而,当我跑步时:
def sort_rows(mat):
mat = [sorted(i) for i in mat]
我得到了
M = [[4, 5, 2, 8], [3, 9, 6, 7]]
sort_rows(M)
print(M)
为什么没有编辑[[4, 5, 2, 8], [3, 9, 6, 7]]
?我以为python函数通过引用传递列表?我错过了什么吗?
答案 0 :(得分:2)
当您sort_rows
被调用时,mat
指向M
指向的同一列表。但是,这一陈述改变了:
mat = [sorted(i) for i in mat]
执行上述操作后,mat
现在指向不同的列表。 M
未更改。
要更改M
:
>>> def sort_rows(mat):
... for i, row in enumerate(mat):
... mat[i] = sorted(row)
...
>>> sort_rows(M)
>>> M
[[2, 4, 5, 8], [3, 6, 7, 9]]
语句mat[i] = sorted(row)
更改mat
的第i个元素,但不会更改mat
指向的列表。因此,M
也会发生变化。
或者,您可以让函数返回包含已排序行的列表:
>>> def rowsort(mat):
... return [sorted(i) for i in mat]
...
>>> M = [[4, 5, 2, 8], [3, 9, 6, 7]]
>>> M = rowsort(M)
>>> M
[[2, 4, 5, 8], [3, 6, 7, 9]]
答案 1 :(得分:0)
原因是sorted
函数没有对列表进行排序,如果要对其进行排序,可以使用list.sort()
方法:
def sort_rows(mat):
[i.sort() for i in mat]
M = [[4, 5, 2, 8], [3, 9, 6, 7]]
sort_rows(M)
print(M)
# [[2, 4, 5, 8], [3, 6, 7, 9]]
sorted
会返回一个新列表,但原始列表不会更改:
x = [3, 2, 1, 4]
sorted(x)
# [1, 2, 3, 4]
x
# [3, 2, 1, 4] # x doesn't change here
答案 2 :(得分:0)
您可以使用return函数在排序行的末尾返回变量mat。
return M
然后,如果你尝试 -
print(sort_rows(M))
你应该得到你想要的结果。感谢。
答案 3 :(得分:0)
您可以使用return函数在排序行的末尾返回变量mat。
返回M
然后,如果你尝试
打印(sort_rows(M))
你应该得到你想要的结果。
我的意思是回复我道歉