按字母顺序排序包含字符串和Python字符串列表的列表

时间:2014-11-25 00:25:15

标签: string sorting python-3.x nested-lists

我对逻辑及其关系进行了分配,在算法的某个步骤中,我必须能够按字母顺序对包含字符串和字符串列表的列表进行排序。

例如,像

[['not', 'D'], ['not', 'C'], 'B', 'A'] 

应该成为

['A', 'B', ['not', 'C'], ['not', 'D']]

以便单位字符串(命题)与列表的第二个元素上的字符串一起排序(不表示命题的否定并且是常量)。

到目前为止,我能够使用sorted(List, key=itemgetter(0,1)),但这只是这个特殊情况的一个技巧,当字符串是文字时,甚至不起作用,就像上面的例子一样。请注意,字符串可以是'B'或'Banana',后者是我的快速修复工具。

感谢您的帮助,因为我无法在此处提出的所有问题中找到解决方案。

编辑:

另一个例子是

[['not', 'Pours'], ['not', 'Outside'], 'Rusty', 'Rains'] 

应该成为

['Rains', 'Rusty', ['not', 'Outside'], ['not', 'Pours']]

但实际上我试图从我提出的通用案例中创建更大的单词,它确实有效。所以我想'不'在这里有一些影响。

即,

[['not', 'Dinossaur'], ['not', 'Carriage'], 'Banana', 'Apocalypse'] 

实际上得到了正确的表格,其中包含@ inspectorG4dget提供的建议。

1 个答案:

答案 0 :(得分:1)

>>> L = [['not', 'D'], ['not', 'C'], 'B', 'A']
>>> L.sort(key=lambda x:(isinstance(x,str) and x) or x[1])
>>> L
['A', 'B', ['not', 'C'], ['not', 'D']]

编辑:

In [30]: L = [['not', 'D'], ['not', 'C'], 'B', 'A']

In [31]: L.sort(key=lambda x:(not isinstance(x,str), x if isinstance(x,str) else x[1]))

In [32]: L
Out[32]: ['A', 'B', ['not', 'C'], ['not', 'D']]

In [33]: L = [['not', 'Pours'], ['not', 'Outside'], 'Rusty', 'Rains']

In [34]: L.sort(key=lambda x:(not isinstance(x,str), x if isinstance(x,str) else x[1]))

In [35]: L
Out[35]: ['Rains', 'Rusty', ['not', 'Outside'], ['not', 'Pours']]