【问题标题】:How does the structure key= min work in sorted method?结构 key= min 如何在排序方法中工作?
【发布时间】:2020-01-29 14:36:42
【问题描述】:

我的问题基本上是这两种代码都可以正常工作,但是 key = min 的第二种解决方案对我来说没有意义。 python如何通过这段代码?为什么它忽略对字母进行排序而直接按数字排序?我无法理解这段代码的底层逻辑。

我的代码:

def order(sentence):
    return ' '.join(sorted(sentence.split(), key=lambda s: int("".join(filter(str.isdigit, s)))))


print(order("is2 Thi1s T4est 3a"))

第二个解决方案

def order(sentence):
    return ' '.join(sorted(sentence.split(), key=min))


print(order("is2 Thi1s T4est 3a"))

两种情况的答案都是正确的:

Thi1s is2 3a T4est

【问题讨论】:

  • 好吧,min('Thi1s') 返回什么? '1'。为什么?因为 “[min 返回] 可迭代对象中的最小项”。字符串是一个iterable1是其中的“最小”字符。

标签: python sorting key


【解决方案1】:

这是因为在 Unicode 编码系统中数字排在字母之前,并且按照字典顺序排序,列表将根据每个字符串中表中较小的值进行排序。您可以通过以下方式查看:

s = "is2 Thi1s T4est 3a"
[min(i) for i in s.split()]
# ['2', '1', '4', '3']

您可以使用 ord 检查数字的 Unicode 值是否确实较小,这将返回每个值在表中的位置:

s = "is2 Thi1s T4est 3a"
for i in s.split():
    for j in i:
        print(f'{j} -> {ord(j)}')
    print()

i -> 105
s -> 115
2 -> 50

T -> 84
h -> 104
i -> 105
1 -> 49
s -> 115

T -> 84
4 -> 52
e -> 101
s -> 115
t -> 116

3 -> 51
a -> 97

【讨论】:

  • 请注意,它不一定是 ASCII 值,因为您可以对所有 Unicode 字符执行此操作……
  • 嗯,是的,这适用于 unicode,值,我会更新。但是,如果我没有弄错所有数字和基本拉丁字符的映射方式相同@deceze
  • 是的,当然,在我们在这里讨论的范围内,ASCII 等于 Unicode。它可能会向未来的读者发送错误的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 2021-03-21
  • 2015-05-20
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
相关资源
最近更新 更多