2017-11-16 9 views
-2

私はこのような何かを持っている(strがintに)。 ので、出力は補正が

List = [["a",1],["b",2]] 
+0

あなたの入力し、どのような出力があるとは何でしょうか?リスト内のxについては、[ –

+0

' output_list = map(lambda x:[x [0]、int(x [1])]、input_list) ] ' –

+0

'output = [[x [0]、int(x [1])]; – bgse

答えて

3

Changed question before rollbackのようにする必要があります:ソート異質リスト

人々が最初のバージョンに答えた後、あなたは完全にあなたの質問を変更しているようです。お願い、それはやめて。あなたは単に新しい質問をすることができます。

異種リストをソートする場合は、タプルを返すカスタムkeyを指定できます。最初の要素は、文字列の場合は0、整数の場合は1です。このようにして、文字列は整数の前に現れます。 オブジェクトが整数である場合、第二要素が順に整数をソートするために-xに設定されている:

def custom_order(x): 
    if isinstance(x, int): 
     return (1, -x) 
    else: 
     return (0, x) 

print(sorted([1,2,3,4,5,"a","b","c","d"], key=custom_order)) 
# ['a', 'b', 'c', 'd', 5, 4, 3, 2, 1] 

このコードはPython2とのpython3に取り組むべきです。要素が文字列でもintでもない場合、Python3で失敗します。

オリジナル質問:ボーナスとして

>>> data = [["a","1"],["b","2"]] 
>>> [[int(s) if s.isdecimal() else s for s in l] for l in data] 
[['a', 1], ['b', 2]] 

、それは任意の順序でとして動作します:int型

にネストされた文字列を変換あなたは、文字列looks like an integerかどうかを確認するためにternary operatornested list comprehensionを使用することができます任意のサイズのサブリスト:

>>> data = [["a","1"],["b","2"],["3", "c"], ["4", "5", "d"]] 
>>> [[int(s) if s.isdecimal() else s for s in l] for l in data] 
[['a', 1], ['b', 2], [3, 'c'], [4, 5, 'd']] 
+2

これは '[['x'、 '1/5'] ''、[here](https://stackoverflow.com/a/24384917/7207392)を参照して失敗します。 –

+0

@PaulPanzer:優れた発言、ありがとう!だから 'str.isdigit'は正しいだろうか? –

+0

「➊」のような数字のために私は恐れられません。 –

6

これを「データ」というリストに格納すると仮定すると、遅くなっている。

new_data = [[k,int(v)] for k,v in data] 

詳細は下記をご参照ください:

data = [["a","1"],["b","2"]] 
new_data = [[k,int(v)] for k,v in data] 

print new_data 

出力:

[['a', 1], ['b', 2]] 
+1

私はOPが実際に望んでいることがあるので勘違いしているので、辞書 '{k:int(v)for k、v for data}'を使用することをお勧めします:) – timgeb

+1

@timgeb:Surprise、suprise! :D今OPが望んでいるものを見てください。 –

関連する問題