2016-02-29 9 views
9

数字と文字列の両方で占められているリストオブジェクトがあります。最高のアルファベット順の最初の文字列アイテムを取得したい場合、どうすればいいですか?ここで数字のアルファベット順の最初の項目を探します。

は明らかに間違っている例の試みであるが、それは望ましい結果を達成するために変更する必要があるものに関しては修正をいただければ幸いです。

lst = [12, 4, 2, 15, 3, 'ALLIGATOR', 'BEAR', 'ANTEATER', 'DOG', 'CAT'] 

lst.sort() 
for i in lst: 
    if i[0] == "A": 
     answer = i 
print(answer) 
+3

何[0] '([)でisinstance(I、strの場合、私はLSTで私のために])ソート'について:?filter組み込みメソッドを使用してintergersから –

+3

'int'と' str'の型を比較す​​ることができないので、フィルタリングなしでPython3でこのリストをソートすることはできません。 –

答えて

8

あなたがisinstanceを使用することができIIUCその後、sortedとアルファベット順のソートで最初の要素を取得し、文字列のみを使用して、元のリストのサブリストを取得:

sub_lst = [i for i in lst if isinstance(i, str)] 
result = sorted(sub_lst)[0] 


print(sub_lst) 
['ALLIGATOR', 'BEAR', 'ANTEATER', 'DOG', 'CAT'] 

print(result) 
'ALLIGATOR' 

や@ TigerhawkT3がcommenで示唆されているように、あなたはminを使用することができますT:

print(min(sub_lst)) 
'ALLIGATOR' 
+8

または 'sorted()[0]'の代わりに 'min()'。 – TigerhawkT3

+3

注意:リストをマテリアライズする(ソートに必要)にはO(N)のスペースが必要で、ソートにはO(N log N)の比較が必要です。とO(N)の比較。 –

15

まず非文字列をフィルタリングして、最高のアルファベットの存在と、文字列を選択するために、min()を使用するgenerator expressionを使用します。

>>> min(x for x in lst if isinstance(x, str)) 
'ALLIGATOR 
+0

@AntonProtopopov、私はあなたが "最初にリストに変換" –

5

もう一つの方法は、メインリストlstをフィルタリングすることです

>>> min(filter(lambda s:isinstance(s, str), lst)) 
'ALLIGATOR' 
関連する問題