2017-11-03 11 views
1

私はリスト['GBP', 31, 'PIT', 25, ['Football]]を持っていると言いますが、すべての整数が7より小さく、すべてのリストが文字列'Football'に変換されるように修正したいと思います。私は本当にどのようにリスト内のすべての項目をスキャンし、その型を決定し、対応する変更を行うようにpythonを許可するか分からない。使用isinstance()リストの中身を複数の種類に変更するにはどうすればいいですか?

+0

['Football]は[' Football ']にする必要があります –

+0

あなたの質問のコードは役に立ちません。この記事を見てください: –

+1

また、コメントに修正を投稿するのではなく、直接あなたの質問を修正できるはずです –

答えて

1

...私は

for x in the_list: 
    if type(x) == ......: 
    x = ..... 

のようなものを試してみましたが、それは実際に動作しません:

the_list = ['GBP', 31, 'PIT', 25, ['Football']] 

for i, x in enumerate(the_list): 
    if isinstance(x, list): 
     the_list[i] = 'Football' 
    elif isinstance(x, int): 
     the_list[i] = x -7 

the_list 

['GBP', 24, 'PIT', 18, 'Football'] 
1

を一般的なケースでは、あなたはタイプのための変換辞書を定義することができます。

d = { 
int:lambda x: x-7, 
list:lambda x: x[0] 
} 

my_list = ['GBP', 31, 'PIT', 25, ['Football']] 

new_list = [d.get(type(item), lambda x: x)(item) for item in my_list] 
print(new_list) # ['GBP', 24, 'PIT', 18, 'Football'] 

このアプローチでは、柔軟にコンバージョンを構成し、コンパクトに保つ​​ことができます。

+0

しかし、このアプローチは、サブクラスをサポートする柔軟性を失います。 – SethMMorton

+0

リストに他のタイプのデータ(タプル、セットなど)が含まれているとどうなりますか...私はそれらのアイテム(辞書にリストされていないタイプ)を同じままにしたいと思います....あなたが提案したコードこの状況では実際には動作しません... –

+0

@PeterJiang、タプル、セットなどのためのコードは、あなたが記述したとおりに正確に動作します - これらのアイテムは同じままです - 'd.get(type(item)、lambda x: x) '部分はそのような振る舞いを保証します。ところで、文字列 '' GBP''と '' PIT''のために用意されている例では動作することがわかります。他の場合は簡単に確認できます。 – MaximTitarenko

関連する問題