添加两个列表然后sort = None(?)

时间:2011-05-17 02:01:46

标签: python python-3.x

第二个列表对列表中的每个项目进行平方,xs。运行下面的代码,python给了我'无'

xs = [12, 10, 32, 3, 66, 17, 42, 99, 20]
a = [b**2 for b in xs]
c = (a + xs).sort()
print(c, end=', ')

相同的列表但不同的代码 -

xs = [12, 10, 32, 3, 66, 17, 42, 99, 20]
a = [b**2 for b in xs]
c = a + xs
c.sort()
print(c, end=', ')

... python给我列表(c),全部排序。我不明白。或者有更多的pythonic方法来做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:12)

一般来说,任何按照就地操作的内容都会按惯例返回None。 (但是,并不一定总是遵循此约定。)somelist.sort()将对列表进行就地排序。

如果您想要排序的副本,则只需拨打c = sorted(a + xs)即可。 sorted对原件的副本进行操作,因此返回副本。

这里有更多的解释:http://wiki.python.org/moin/HowTo/Sorting/

答案 1 :(得分:4)

您可以使用生成器表达式和itertools来减少临时存储量,例如

>>> import itertools
>>> xs = [12, 10, 32, 3, 66, 17, 42, 99, 20]
>>> a = (b**2 for b in xs)
>>> c = sorted(itertools.chain(a, xs))
>>> c
[3, 9, 10, 12, 17, 20, 32, 42, 66, 99, 100, 144, 289, 400, 1024, 1764, 4356, 9801]