【问题标题】:python format string by length [closed]python按长度格式化字符串[关闭]
【发布时间】:2018-06-14 15:21:34
【问题描述】:

我在下面有一些字符串:

123123|00|992|1111
222222|2222|19|922
997997|3333|922|77

我怎样才能像这样格式化(按 len 排序):

123123|1111|00|992
222222|2222|19|922
997997|3333|77|922

【问题讨论】:

标签: python


【解决方案1】:

str.splitstr.joinsorted 一起使用

演示:

s = """123123|00|992|1111
222222|2222|19|922
997997|3333|922|77"""

data = ["|".join(sorted(i.split("|"), key=len, reverse=True)) for i in s.split("\n")]
print( "\n".join(data) )

输出:

123123|1111|992|00
222222|2222|922|19
997997|3333|922|77

【讨论】:

    【解决方案2】:

    试试这个

    a='''123123|00|992|1111
    222222|2222|19|922
    997997|3333|922|77'''
    '\n'.join(['|'.join(sorted(e.split("|"),key=len,reverse=True)) for e in a.split("\n")])
    

    输出:

    123123|1111|992|00
    222222|2222|922|19
    997997|3333|922|77
    

    【讨论】:

      【解决方案3】:

      OP 的排序顺序不是基于字符串长度,因为 2 的长度在 3 的长度之前(最后两段)

      为此,需要自定义排序映射

      ranks = {6:0, 4:1, 2:2, 3:3}
      text = """123123|00|992|1111
      222222|2222|19|922
      997997|3333|922|77"""
      
      result = '\n'.join(['|'.join(sorted(line.split('|'),key=lambda x: ranks[len(x)])) 
                          for line in text.split('\n')])
      print(result)
      # outputs:
      123123|1111|00|992
      222222|2222|19|922
      997997|3333|77|922
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-04
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2013-04-27
        • 2013-09-24
        • 1970-01-01
        相关资源
        最近更新 更多