第二个列表对列表中的每个项目进行平方,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方法来做到这一点?
谢谢!
答案 0 :(得分:12)
一般来说,任何按照就地操作的内容都会按惯例返回None
。 (但是,并不一定总是遵循此约定。)somelist.sort()
将对列表进行就地排序。
如果您想要排序的副本,则只需拨打c = sorted(a + xs)
即可。 sorted
对原件的副本进行操作,因此返回副本。
答案 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]