【问题标题】:How can I organize a list of strings alphabetically starting on a specific letter?如何从特定字母开始按字母顺序组织字符串列表?
【发布时间】:2018-07-10 21:56:39
【问题描述】:

例如,如果我有:

x = ['5 Gabriela', '4 Isabel', '1 Daniel', '1 Gabriel']

我希望我的输出列表按名称而不是数字来组织:

output_list = ['1 Daniel', '1 Gabriel', '5 Gabriela', '4 Isabel']

我尝试做一些切片,但我的输出列表没有数字:

names = []
for k in range (0, len(sum_sor)):
    start = x[k][2::]
    names.append(start)
    y = sorted(names)
print(y)

输出: y = ['Daniel', 'Gabriel', 'Gabriela', 'Ixchelle']

【问题讨论】:

  • 请注意,您当前的列表实际上并没有按数字排序,它仍然是字典排序,但从数字开始
  • 您的输出列出的名称与输入的名称不同是不是错字?

标签: python string slice alphabetical


【解决方案1】:

使用 sortedkey 作为 lambda,返回 x 的每个元素的名称

sorted(x, key=lambda y: y.split()[1])

【讨论】:

    【解决方案2】:

    这里有另外两种方法,使用正则表达式和sorted 函数。

    下面会先将字符串中的数字去掉,然后将x中的元素按照无数字版本排序。

    sorted(x, key=lambda y: re.sub("\d+", "", y))
    

    这个会先寻找一个非数字字符的序列,然后根据这个序列从x中对元素进行排序。

    sorted(x, key=lambda y: re.search("\D+", y).group())
    

    【讨论】:

      【解决方案3】:

      我对 python 比较陌生,但我会创建一个函数来获取第三个字母。假设每个都有这种方式:

      def get_letter(sample_string):
          return sample_string[2]
      

      现在我们可以使用这个函数作为键对列表进行排序:

      x = ['5 Gabriela', '4 Isabel', '1 Daniel', '1 Gabriel']
      output_list = sorted(x,key=get_letter)
      

      希望我能帮上忙,祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-03
        • 1970-01-01
        • 2013-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多