6

リストをアルファベット順に並べ替えようとしています。大文字は小文字の前に来る必要があります。

l = ['a', 'b', 'B', 'A']

sorted(l)結果として['A','a','B','b']

私はこれら 2 つの形式を試しましたが、役に立ちませんでした。

>>> sorted(l, key=lambda s: s.lower())
['a', 'A', 'b', 'B']
>>> sorted(l, key=str.lower)
['a', 'A', 'b', 'B']
4

2 に答える 2

13

代わりに、キーとしてタプルを作成します。

>>> sorted(lst, key=lambda L: (L.lower(), L))
['A', 'a', 'B', 'b']

これは、小文字のソート順は変更されないこと('a', 'a')を意味しますが、大文字の最初のキーが対応する小文字と同じレベルになり、その前にソートされることを意味します。例: ('a', 'A')<('a', 'a')

于 2013-05-16T07:48:51.270 に答える
5

そのようなリストが次のリストをソートする方法が興味深い

lst = ['abb', 'ABB', 'aBa', 'AbA']

提案されたソリューションは次の結果を生成します

>>> sorted(lst, key=lambda L: (L.lower(), L))
['AbA', 'aBa', 'ABB', 'abb']

異なる結果を伴う、より複雑なソリューションを提案できます

>>> sorted(lst, key=lambda a: sum(([a[:i].lower(), 
                                    a[:i]] for i in range(1, len(a)+1)),[]))
['ABB', 'AbA', 'aBa', 'abb']
于 2013-05-16T08:21:52.957 に答える