我对逻辑及其关系进行了分配,在算法的某个步骤中,我必须能够按字母顺序对包含字符串和字符串列表的列表进行排序。
例如,像
[['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提供的建议。
答案 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']]