假设我们有三个列表:
listA = [5,6,2]
listB = [7,1]
listC = [5,3,6]
Run Code Online (Sandbox Code Playgroud)
我想在一个for循环中对这些列表进行排序,所以做类似的事情:
for thisList in [listA, listB, listC]: # edited, was 'list' here
thisList = thisList.sort()
Run Code Online (Sandbox Code Playgroud)
哪里thisList会listA,然后listB,然后listC,所以在最后我的名单会是这样的:
listA = [2,5,6]
listB = [1,7]
listC = [3,5,6]
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
注意 - 这只是一个例子,我正在处理的问题有点难,但我想做一个我需要的简单例子.
- 编辑 -
如果我想在这里进行一些自定义排序怎么办?我知道,例如,我可以这样进行自定义排序:myList = sorted(myList,key = lambda val:val/2)
但我正在使用sorted,而不是sort在这里.
我可以使用自定义排序sort吗?
询问原因给出答案(thx btw;))正在使用sort......
你很亲密 你想要的是:
for thisList in [listA, listB, listC]:
thisList.sort()
Run Code Online (Sandbox Code Playgroud)
您的代码中的第一个问题是您使用list循环变量,但thisList在循环内部.那些不一样.所以,不管你以前分配给thisList前面的模块或交互式会话中,你只是在分选一遍又一遍,不影响listA,listB和listC.
第二个问题是该list.sort方法就地对列表进行排序并返回None,因此您不希望对该返回值执行任何操作.用它覆盖变量是无害的,但它肯定会让读者感到困惑,所以不要这样做.thisListNone
由于您已将问题编辑为不同的内容:
如果我想在这里进行一些自定义排序怎么办?我知道,例如,我可以这样进行自定义排序:myList = sorted(myList,key = lambda val:val/2)...我可以在排序中使用自定义排序吗?
看文档的sorted和list.sort.他们两个都采取了key争论,并且都以同样的方式记录.如果你无法猜测它们是否真的以相同的方式工作,那么自己测试它需要几秒钟:
>>> lst = [2, 11]
>>> sorted(lst, key=str)
[11, 2]
>>> lst.sort(key=str)
>>> lst
[11, 2]
Run Code Online (Sandbox Code Playgroud)
不要用数字或字母命名变量.将所有列表放在另一个列表中.然后你可以在for循环中操作这些对象:
lists = [listA, listB, listC]
for lst in lists:
lst.sort()
Run Code Online (Sandbox Code Playgroud)