2017-01-18 20 views
1

listの整数と文字の場合、 何らかの順序でこれらの要素を並べ替える必要があります。例えば 、Python:整数と文字で配列をソートする方法は?

ex_array = [1, 3, 2', 2, 1', 3', 3] 

この場合

sorted(ex_array) = [1', 1, 2', 2, 3', 3, 3] 

にソートされるべき文字の順序は、整数のみからなる場合、私は、コードを作ることができる

1' < 1 < 2' < 2 < 3' < 3. 

によって与えられます。 しかし、私は、プライムされていないシンボルとプライムされていないシンボルをどのように比較するのか分かりません。

Pythonで何をすべきか教えてください。その要素が整数であるか否かを

+7

「1」とは何ですか? '' 1 '' 'や' '1 ''を意味しますか? – MYGz

+0

単なる記号です。しかし、私はそれらを区別する必要があります。 –

+0

引用符で区切る必要があります。 '' 1 ''または' '1''は文字列、' 1'はint、 '1''は構文エラーです。 – MYGz

答えて

9

各素子の整数値を並び替え、ならびに2つの要素が同じ整数値を有する場合

>>> a = [1, 3, '2', 2, '1', '3', 3, '10', 10, 'potato', "1'", lambda: None, '-3', -3, -4] 
>>> sorted(a, key=lambda x: (int(''.join(v for i,v in enumerate(str(x)) if v.isdigit() or (i==0 and v=='-')) or 0), isinstance(x, int))) 
[-4, '-3', -3, 'potato', '1', "1'", 1, '2', 2, '3', 3, 3, '10', 10, <function <lambda> at 0x000000DAD51DB9D8>] 

、文字列、整数の前に配置されます。

+0

@schwobaseggl - あなたは絶対に正しいです。 'str'から' int'に変更されました。 – TigerhawkT3

+0

@schwobaseggl - '1''は構文エラーですので、それらは文字列を意味するものと仮定します。要素が実際に '' 1 '' 'のような文字列だった場合、' int(x.strip( "'")) 'を実行することができます。 – TigerhawkT3

+0

@schwobaseggl - 新しい編集により、より堅牢になりました。 '' potato ''のような任意の値を扱うことさえできます。 – TigerhawkT3

関連する問題