相关疑难解决方法(0)

对列表中的元素子列表进行排序,其余部分保留在原位

假设我有一个排序的字符串列表,如:

['A', 'B' , 'B1', 'B11', 'B2', 'B21', 'B22', 'C', 'C1', 'C11', 'C2']
Run Code Online (Sandbox Code Playgroud)

现在我想基于Bs 的尾随数值进行排序- 所以我有:

['A', 'B' , 'B1', 'B2', 'B11', 'B21', 'B22', 'C', 'C1', 'C11', 'C2']
Run Code Online (Sandbox Code Playgroud)

一种可能的算法是对正则表达式进行散列,例如regex = re.compile(ur'(B)(\d*))找到第一个和最后一个的索引B,对列表进行切片,使用正则表达式的第二个组对切片进行排序,然后插入已排序的切片.然而,这似乎太麻烦了.如果它与正则表达式不匹配并且只对匹配的项(子列表)进行排序,是否有办法编写一个"将项目保留在原位"的关键函数?

注意:以上只是一个例子 ; 我不一定知道模式(或者我也可能想要对C进行排序,或者任何具有尾随数字的字符串).理想情况下,我正在寻找一种解决一般问题的方法,即只对与给定标准匹配的子序列进行排序(或者失败,只是满足给定前缀的特定标准后跟一串数字的那些).

python sorting key list python-2.7

13
推荐指数
2
解决办法
1455
查看次数

对列表进行排序:数字以升序排列,字母以降序排列

这个问题实际上是改编自Mat.S先前提出的问题(图片).虽然它已被删除,但我认为这是一个很好的问题,所以我将它与更清晰的要求和我自己的解决方案重新发布.


给出一个字母和数字列表,比方说

['a', 2, 'b', 1, 'c', 3]
Run Code Online (Sandbox Code Playgroud)

要求是按升序对数字进行排序,按降序对字母进行排序,而不改变字母和数字的相对位置.我的意思是,如果未排序的列表是:

[L, D, L, L, D]    # L -> letter; # D -> digit 
Run Code Online (Sandbox Code Playgroud)

然后,排序列表也必须是

[L, D, L, L, D] 
Run Code Online (Sandbox Code Playgroud)
  1. 字母和数字做并不一定替代常规模式-它们可以出现在任意顺序

  2. 排序后 - 数字递增,字母降序.

所以对于上面的例子,输出是

['c', 1, 'b', 2, 'a', 3]
Run Code Online (Sandbox Code Playgroud)

另一个例子:

 In[]: [5, 'a', 'x', 3, 6, 'b']
Out[]: [3, 'x', 'b', 5, 6, 'a']
Run Code Online (Sandbox Code Playgroud)

这样做有什么好办法?

python sorting list-comprehension list

12
推荐指数
2
解决办法
2356
查看次数

标签 统计

list ×2

python ×2

sorting ×2

key ×1

list-comprehension ×1

python-2.7 ×1