【问题标题】:list.sort(reverse = True) not changing the list to descending order [duplicate]list.sort(reverse = True) 不将列表更改为降序[重复]
【发布时间】:2020-11-30 00:42:58
【问题描述】:

我正在做一个关于从字符串中提取数字的问题。它指出:

每个测试用例中有不同的数字,您需要找到每个测试用例中的数字。每个测试用例按顺序有不同的编号。您只需要找到那些不包含 9 的数字。例如,如果字符串包含“hello this is alpha 5051 and 9475”。您将提取 5051 而不是 9475。

输入格式是第一行将包含测试用例的数量,每个测试用例的第一行将包含字符串。

我们必须输出提取的数字。

我的想法是使用re模块,它会从列表中提取数字,然后按降序排序,然后检查数字是否有效。

我的代码:

import re
for _ in range(int(input())):
    a = input()
    pattern = '\d+'
    result = re.findall(pattern,a)
    result.sort(reverse = True)
    print(result)

但是输出很有趣。

输出:

1
This is alpha 5057 and 97
['97', '5057']

为什么列表没有按降序排序?

【问题讨论】:

  • 你排序的是字符串而不是整数...如果你想按数值排序,你可以使用result.sort(reverse=True, key=int)
  • 确实按降序排序。 “9”>“5”。你喂它串;您似乎希望对转换后的数值进行排序。

标签: python algorithm sorting data-structures


【解决方案1】:

看起来您需要先将列表值转换为ints,然后才能进行排序:

import re
for _ in range(int(input())):
    a = input()
    pattern = '\d+'
    result = re.findall(pattern,a)
    result = map(int, result)
    result.sort(reverse = True)
    print(result)

请参阅 mapsort function 上的 python 文档。

【讨论】:

    猜你喜欢
    • 2012-04-15
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 2012-03-10
    • 2012-04-10
    • 1970-01-01
    • 2023-01-30
    相关资源
    最近更新 更多