【问题标题】:Sort a list of list of strings based on characters after first space根据第一个空格后的字符对字符串列表进行排序
【发布时间】:2019-12-15 10:17:15
【问题描述】:

我有一个字符串列表。我想根据第一个空格后的字符对列表进行排序(字母数字排序)。如果第一个空格后的字符相同,则按第一个空格前的字符排序

L2 = ["ea first qpx", "India Kashmir Equator Khidderpore", "India Kashmir Alipore" , "az0 first qpx", "India Ambati Chembur Mahavir"]

【问题讨论】:

  • 到目前为止你尝试过什么?问题出在哪里?
  • 我认为对于第一种情况,您可以尝试正则表达式并排序。 sorted(l2,key= lambda x: re.findall('\s(.)',x)[0])
  • 感谢得到答案,我没有拆分内部字符串,所以当我是 x[1::] 时,它从第二个字符开始,我得到了错误的排序。我在做 L2.sort(key = lambda x:(x[1::],x[0])) 而应该是 L2.sort(key = lambda x:(x.split()[1::] ,x[0]))

标签: python python-3.x list sorting


【解决方案1】:

这有效并返回 排序的新列表 ['Ambati Chembur Mahavir', 'Kashmir Alipore', 'Kashmir Equator Khidderpore', 'first qpx', 'first qpx']

代码如下:

L2 = ["ea first qpx", "India Kashmir Equator Khidderpore", "India Kashmir Alipore" , "az0 first qpx", "India Ambati Chembur Mahavir"] 


def sortListAfterSpaceClean(myList):
    newList = []
    for i, val in enumerate(myList):
        # create a list of the characters
        z = list(val)
        for j, jVal in enumerate(z):
            if jVal == " ":
                # we want the rest of the string
                lenOfString = len(val) - j - 1
                restOfString = val[-lenOfString:]
                newList.append(restOfString)
                break



    print('the old list:')    
    print(myList)
    print('the new list:')
    print(newList)
    print('sorted new list')
    newList.sort()
    print(newList)

    return newList



sortListAfterSpaceClean(L2)

请随意编辑和评论。

【讨论】:

    【解决方案2】:

    这也有效:

    def sortListAfterSpaceSplit(myList): newList = [] for val in myList: # split the string
    s = val.split(' ', 1) newList.append(s[1]) newList.sort() return newList

    【讨论】:

      【解决方案3】:

      利用sort()中的Lambda表达式对内部列表进行排序

      L2.sort(key = lambda x : (x.split(" ")[1].lower(), x.split(" ")[0].lower()))

      这将用空格分割内部列表,并根据空格后的第一个字符集对其进行排序。如果第一个字符相同,则将考虑出现在第零个索引处的字符。

      lower() 用于使排序不区分大小写。如果不使用,则带有大写字符的字符串将优先于小写字符。

      例子:

      >> L2 = ["x c t", "a a g", "c a g"]
      
      >> L2.sort(key = lambda x : (x.split(" ")[1].lower(), x.split(" ")[0].lower()))
      
      >> L2
      
      ['a a g', 'c a g', 'x c t']
      
      L2 = ["ea first qpx", "India Kashmir Equator Khidderpore", "India Kashmir Alipore" , "az0 first qpx", "India Ambati Chembur Mahavir"]
      
      >> L2.sort(key = lambda x : (x.split(" ")[1].lower(), x.split(" ")[0].lower()))
      
      >> L2
      
      ['India Ambati Chembur Mahavir', 'az0 first qpx', 'az0 first qpx', 'India Kashmir Equator Khidderpore', 'India Kashmir Alipore']```
      

      【讨论】:

      • 已更新答案以考虑第一个字符可以相同的情况。希望能帮助到你。如果它解决了您的问题,请投票和/或接受答案:)
      猜你喜欢
      • 1970-01-01
      • 2021-10-30
      • 2014-10-29
      • 2022-11-15
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      相关资源
      最近更新 更多