【问题标题】:How to sort list of strings alphabetically with upper and lower values?如何使用上下值按字母顺序对字符串列表进行排序?
【发布时间】:2020-05-09 21:19:17
【问题描述】:

我有以下代码:

v = ['zack', 'timor', 'Topher']
v.sort()
print(v)

['Topher', 'timor', 'zack']

我想得到的是:

['timor','Topher', 'zack']

这是正确的字母顺序。

基本上它应该忽略大小写字母之间的区别。 我不能只做 lower() 因为['timor','topher', 'zack'] 不是所需的输出。

简单来说,我希望它与这条规则进行比较:a=A, b=B, ... 我该怎么做?

【问题讨论】:

  • 你可以做一个更复杂的地图功能,基本上你记住哪些单词被改变了,对它们进行排序并将它们改回来。您可以使用 2d 数组和对两个数组进行排序,在 python 中相当天真地做到这一点。如果你愿意,我可以写一个答案

标签: python


【解决方案1】:

好的,所以 sort 函数允许您指定一个键来比较元素;

v.sort(key=str.lower)

来源:https://docs.python.org/3/howto/sorting.html

【讨论】:

    【解决方案2】:

    您可以为排序指定一个键函数。这将为这些数据执行此操作:

    v = ['zack', 'timor', 'Topher', 'Quark', "quark"]
    v.sort( key= lambda x: x.lower())
    print(v)
    
    v = ['zack', 'timor', 'Topher', 'Quark', "quark"]
    v.sort( key= lambda x: (x.lower(), x[0].isupper()))  # this will sort lower before upper
    print(v)
    
    ['Quark', 'quark', 'timor', 'Topher', 'zack']  # keep original order
    ['quark', 'Quark', 'timor', 'Topher', 'zack']  # always lower before upper, only 1st char
    

    v.sort( key= lambda x: x.lower()) 将稳定排序 - 这意味着它通过小写排序并保持原始列表的出现顺序。

    【讨论】:

      【解决方案3】:

      为您的排序添加一个键,例如:

      def case_insensitive_sort(a):
          return a.lower()
      
      v = ['zack', 'timor', 'Topher']
      v.sort(key=case_insensitive_sort)
      print(v)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-23
        • 2013-09-04
        • 1970-01-01
        • 2012-03-16
        • 1970-01-01
        • 2023-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多