フロート私はこのようなリストを持っていると言う:変換リストと
私は、文字列を保持したままフロートに、リスト内の数字を変換したいです。
私はこれを書いた:
for i in a:
try:
i = float(i)
except ValueError:
pass
はこれを行うには、より効率的で、きちんとした方法はありますか?
フロート私はこのようなリストを持っていると言う:変換リストと
私は、文字列を保持したままフロートに、リスト内の数字を変換したいです。
私はこれを書いた:
for i in a:
try:
i = float(i)
except ValueError:
pass
はこれを行うには、より効率的で、きちんとした方法はありますか?
変数の値を変更していますi
- >配列a
の内容は変更されません。 あなたは配列の値を変更したい場合は、むしろ、このようにそれを実装する必要があります。
for index, value in enumerate(a):
try :
a[index] = float(value)
except ValueError :
pass
:
a = ['hello', '1.0', 'hi', 2, 'blah blah', '3']
def float_or_string(item):
try:
return float(item)
except ValueError:
return item
a = map(float_or_string, mylist)
は、トリックを行う必要があります。私はtry:... except:...
ブロックが両方ともa)効率的でb)きれいであると言いたい。 halexが指摘したように、map()
は、リストを所定の位置に変更せず、新しいリストを返し、a
と同じ値を設定します。
方法を除いて試してみるには、/それをやってのPython的な方法ですが、あなたは本当にそれを嫌うならば、これはあなたの目的を果たすかどうかを確認:
a = ['hello','1','hi',2,'something','3']
pattern = re.compile(r'^(-?\d+)(\.\d+)?')
b = [float(item) if isinstance(item, str) and re.match(pattern, item)
else item for item in a]
正規表現? –
@JoelCornett Haha、私はOPがこれをやってみることを好きではないと思ったので、もしかしたら彼がもっと良いかもしれない。 –
私の短い例について何:
a = ['hello','1','hi',2,'something','3']
for i, item in enumerate(a):
if str(item).isdigit():
a[i] = float(item)
print a
それは '' 1.0 ''で壊れます。 OPがそれらのいずれかを持つことを計画しているかどうかは分かりませんが。 –
私はこれが短く、より良い方法だと思います:
a = ['hello','1','hi',2,'something','3']
for index,value in enumerate(a):
if isinstance(value,int):
a[index] = float(value)
print a
出力は、次のとおりです。[ 'こんにちは'、 '1'、 'こんにちは'、2.0 '何か'、 '3']
数字は常に同じ場所にありますか? –