2014-11-25 202 views
0

我有一个关于逻辑及其关系的任务,并且在算法的某个步骤中,我必须能够按照字符串和字符串列表按字母顺序排序列表。按字母顺序排序字符串和Python中的字符串列表

例如,像

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

应该成为

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

,使得单元串(命题)扎堆与字符串列表的第二个元素(不是象征着整理一个命题的否定并且是不变的)。

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

我很感谢您的帮助,因为我无法在这里找到的所有问题中找到解决方案。

编辑:

另一个例子是,

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

应该成为

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

但我真的试图从我提出的一般情况下,去创造更大的话,它确实工作。所以我猜这个'不'在这里有一些影响力。

也就是说,

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

实际上得到正确的形式与@ inspectorG4dget友情提供的建议。

回答

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']] 
+0

非常感谢你的回答,这是很有启发。 但是,我测试了它的情况下,字符串的维数高于1,并且列表出现在单位字符串之前。我相信基于类型的另一个条件是必需的,但不会损害字面的情况。你有什么建议可以有效地应用它吗? – Alegom 2014-11-25 05:28:09

+0

@Alegom:请编辑您的帖子,以包括您提到的问题以及预期/期望结果的示例 – inspectorG4dget 2014-11-25 05:42:34

+0

帖子已更新!我设法分两步做,但我希望有一个步骤的想法。 – Alegom 2014-11-25 06:04:40

相关问题