たとえば、文字列と数字の両方の文字列を含む Python のリストを考えてみましょう
a = ['Total', '1', '4', '5', '2']
これを混合値リストに変換するにはどうすればよいでしょうか
b = ['Total', 1.0, 4.0, 5.0, 2.0]
一般に、文字列がリストのどこにあるかわからない場合があることに注意してください。
a = ['Total', '1', '4', 'Next', '2']
たとえば、文字列と数字の両方の文字列を含む Python のリストを考えてみましょう
a = ['Total', '1', '4', '5', '2']
これを混合値リストに変換するにはどうすればよいでしょうか
b = ['Total', 1.0, 4.0, 5.0, 2.0]
一般に、文字列がリストのどこにあるかわからない場合があることに注意してください。
a = ['Total', '1', '4', 'Next', '2']
ジェネレーター関数と例外処理を使用できます。
>>> def func(seq):
for x in seq:
try:
yield float(x)
except ValueError:
yield x
...
>>> a = ['Total', '1', '4', '5', '2']
>>> list(func(a))
['Total', 1.0, 4.0, 5.0, 2.0]
最初の列以外のすべてを変換するだけです:
b = a[:1] + [float(i) for i in a[1:]]
他の質問から判断すると、CSV ファイルを処理しているため、最初の列が常に文字列である場合、各行のその部分を変換しても意味がありません。
>>> a = ['Total', '1', '4', '5', '2']
>>> a[:1] + [float(i) for i in a[1:]]
['Total', 1.0, 4.0, 5.0, 2.0]
try:
-アプローチを使用することもできますがexcept ValueError
、どの列にテキストがあり、どの列に数値があるかが事前にわかっているのに、なぜオーバーヘッドが発生するのでしょうか?