【问题标题】:sorting list after adding and replacing value添加和替换值后的排序列表
【发布时间】:2018-03-23 19:49:22
【问题描述】:

我最近开始学习 python,目前正在使用列表/循环。在下面的列表中,我添加了 (append)mercedes用福特替换了本田插入了大众汽车。当我运行代码时,列表排序正确,但新车(福特、丰田和大众汽车)却在列表的顶部。

代码

cars = ['honda', 'acura', 'bmw', 'bugatti', 'Toyota']
cars.append('mercedes')
cars[0] = 'Ford'
cars.insert(1, 'Wolkswagen')
cars.sort()
for car in cars:
    print (car.title() + ", is just a regular car")

结果

福特,只是一辆普通的汽车 丰田,只是一辆普通的车 大众汽车,只是一辆普通的汽车 讴歌,只是一辆普通的车 宝马,只是一辆普通的车 布加迪,只是一辆普通的车 梅赛德斯,只是一辆普通的汽车

【问题讨论】:

  • 提示:大小写对sort()很重要(例如Toyotatoyota之前)。
  • 天哪!你是对的。我没有注意到我有一些大写的单词,简单的答案。我读过一些关于大写字母的东西,但没有读到结果是什么。谢谢
  • @Darwinsm。随意选择一个答案。两个答案都指出了这一点。它可以让您获得几分,并将您的问题标记为已回答未来读者。

标签: python-3.x list loops


【解决方案1】:

由于 Python sorting 区分大小写,因此您需要使用排序键显式使排序不敏感。 sort key 是一个生成对象的函数,这些对象实际上将从列表中的对象中排序。例如:

cars.sort(key=str.casefold)

str.casefold 接受一个字符串并将其转换为小写,因此您的所有字符串都将按照小写进行排序。原件将保持不变。

如果您不使用任何非拉丁字符,使用 str.lower 也应该可以正常工作。

列表正确排序后,您可以使用bisect 模块来确保正确插入未来的元素,而无需对整个内容重新排序。

【讨论】:

    【解决方案2】:

    按字典顺序对字符串进行排序时,大写字母位于小写字母之前。您需要确保所有名称的大小写相同,或者忽略大小写对它们进行排序以获得一致的结果。

    例如:

    cars = sorted(s.title() for s in cars)
    for car in cars:
      print (car + ", is just a regular car")
    

    【讨论】:

    • 这将重新格式化所有汽车名称并制作列表副本。为什么不直接使用key
    • 我还没到那里,我还在学习基础知识。我的专业是平面设计/视频/网络,所以我从python开始转向编程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多