Python排序非逻辑字符串

2024-09-21 01:20:06 发布

您现在位置:Python中文网/ 问答频道 /正文

微软Word有这种默认的非逻辑的方法,我相信它已经在许多其他地方表现出来了。我说的是

...

1.8.1 Ninja

1.8.2 Gaab

1.9.1 Foo

1.10.1 Baa

...

但是处理字符串并希望排序会给出以下顺序:

[1.10.1 Baa, 1.8.1 Ninja, 1.8.2 Gaab, 1.9.1 Foo]

有什么简单而漂亮的python方法可以解决这个问题吗?你知道吗


Tags: 方法字符串foo排序顺序地方逻辑word
3条回答

您需要lambda,其中三个键是从节编号中获得的,即从拆分节编号中获得的三个整数,如下所示:

>>> lst = ['1.10.1 Baa', '1.8.1 Ninja', '1.8.2 Gaab', '1.9.1 Foo']
>>> sorted(lst, key=lambda x:([int(x) for x in x.split()[0].split('.')]))
['1.8.1 Ninja', '1.8.2 Gaab', '1.9.1 Foo', '1.10.1 Baa']
sorted(section_names, key=lambda x: tuple(map(int, x.partition(" ")[0].split("."))))

利用元组按所需顺序排序的事实:

strList = ["1.8.1 Ninja",                                                        
  "1.8.2 Gaab",
  "1.9.1 Foo",
  "1.10.1 Baa"]

sorted(( (tuple(map(int, x.split('.'))), y)   # Sort according to list numbers
          for s in strList 
          for [x, y] in [s.split(' ', 1)]     # [x, y] = s.split(' ', 1)
                                              # Splits list in exactly 2 elems
      ))

# Out[43]:
# [((1, 8, 1), 'Ninja'),
# ((1, 8, 2), 'Gaab'),
# ((1, 9, 1), 'Foo'),
# ((1, 10, 1), 'Baa')]

相关问题 更多 >

    热门问题