【问题标题】:Is this call chaining legal in python? [duplicate]这个调用链在 python 中合法吗? [复制]
【发布时间】:2019-11-19 23:34:33
【问题描述】:

我对下面 python 代码的行为感到困惑。 我想对列表中的最后 3 个数字进行排序。但是当我链接操作时,它不起作用。我错过了什么?

行为 1:

>>> a = [10,4,2,3]
>>> b = a[1:].sort() # I want to sort last 3 numbers. But when I chain the 
                     # operations, it doesn't work. Why?
>>> b
<empty value> 

====

行为 2:

>>> a = [10,4,2,3]
>>> b = a[1:]
>>> b.sort()
>>> b
[2, 3, 4]

【问题讨论】:

  • 它是合法的,但它没用。 .sort() 就地 工作并返回None,所以它在分配中没有用。 b = ... in b = a[1:].sort() 是一个分配,所以你得到 None 回来。查看sorted()
  • 相反,您可以使用b = sorted(a[1:])。见:stackoverflow.com/a/22442440/11981207
  • 我同意。但是,如果我执行 a[1:].sort() 那么这不会对“a”进行排序,这就是整个调查的开始方式。

标签: python syntax


【解决方案1】:

这是因为 .sort() 不返回新列表,而是改变现有列表。例如。 [5, 2, 7, 4, 5].sort() 不返回任何内容。 看看这个:

a = [2, 4, 7, 3, 4, 6]
a.sort()
print(a)

输出是:

[2, 3, 4, 4, 6, 7]

你可能想做的是:

a = [2, 4, 7, 3, 4, 6]
b = sorted(a[1:])
print(a)
print(b)

【讨论】:

    猜你喜欢
    • 2012-12-17
    • 1970-01-01
    • 2023-04-04
    • 2016-04-09
    • 2019-11-11
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    相关资源
    最近更新 更多