【问题标题】:add two lists then sort = None(?)添加两个列表然后 sort = None(?)
【发布时间】:2011-08-26 21:32:10
【问题描述】:

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

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 的方式来做到这一点?

谢谢!

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

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

    如果您想要一个排序的副本,您可以致电c = sorted(a + xs)sorted 对原始副本进行操作,因此返回副本。

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

    【讨论】:

    • @OP:pass 或简单的return 等价于return None 的函数。 python 中所有函数调用的输出都是可分配的,即使您认为它们根本没有返回任何内容。 list.sort 返回无。
    【解决方案2】:

    您使用生成器表达式和迭代工具来减少这样的临时存储量

    >>> 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]
    

    【讨论】:

      猜你喜欢
      • 2017-12-23
      • 1970-01-01
      • 2015-04-26
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 2010-12-19
      • 1970-01-01
      相关资源
      最近更新 更多