如何在Python中实现Schwartzian变换?

时间:2017-06-25 19:40:08

标签: python perl sorting

在Perl中,我有时使用Schwartzian Transform来有效地对复杂数组进行排序:

@sorted = map  { $_->[0] }  # sort by word length
          sort { $a->[1] <=> $b->[1] } # use numeric comparison
          map  { [$_, length($_)] }    # calculate the length of the string
               @unsorted;

如何在Python中实现此转换?

1 个答案:

答案 0 :(得分:3)

你不需要。 Python内置了这个功能,实际上Python 3 删除了 C风格的自定义比较,因为在绝大多数情况下这都是好得多。

按字长排序:

unsorted.sort(key=lambda item: len(item))

或者,因为len已经是一元函数了:

unsorted.sort(key=len)

这也适用于内置的sorted函数。

如果要对多个条件进行排序,可以利用元组按字典顺序排序的事实:

# sort by word length, then alphabetically in case of a tie
unsorted.sort(key=lambda item: (len(item), item)))