3

文字列型の 2 次元リストを int に変換しようとしています。私がこれまでに試したこと:

[[float(i) for i in lst[j] for j in lst]

for ループを使用:

for i in range(len(lst)):
    for j in range(len(lst[i])):
         lst[i][j]=float(lst[i][j])
4

5 に答える 5

8
>>> nums = [['4.58416458379', '3.40522046551', '1.68991195077'], ['3.61503670628', '5.64553650642', '1.39648965337'], ['8.02595866276', '8.42455003038', '7.93340754534']]
>>> [[float(y) for y in x] for x in nums]
[[4.58416458379, 3.40522046551, 1.68991195077], [3.61503670628, 5.64553650642, 1.39648965337], [8.02595866276, 8.42455003038, 7.93340754534]]

あなたの意図はわかりませんが、forループバージョンが機能しなかったと主張しているため、その場合は1次元の結果が必要になる場合があります。

>>> [float(y) for x in nums for y in x]
[4.58416458379, 3.40522046551, 1.68991195077, 3.61503670628, 5.64553650642, 1.39648965337, 8.02595866276, 8.42455003038, 7.93340754534]
于 2013-04-14T07:02:04.997 に答える
3

どちらのソリューションもほぼ機能しています。確かに、2 番目のものはすでに機能しているはずですが、おそらく少し改善される可能性があります。

リスト内包表記バージョンを更新する方法は次のとおりです。このバージョンの (おそらく疑わしい) 利点は、float を含む新しいネストされたリストを作成し、文字列の元のネストされたリストを変更しないままにすることです (したがって、必要に応じて別の用途に使用できます)。

new_lst = [[float(string) for string in inner] for inner in lst]

for ループ コードを更新する方法は次のとおりです。リスト内包表記を使用するバージョンとは異なり、このコードは元のリストの内容を適切に変更します。現在のコードは問題なく動作するはずですが、以下のバージョンは、範囲を反復してリストにインデックスを付けるのではなく、リストの内容を反復するため、私の意見ではやや「pythonic」です。enumerateインデックスは割り当てにのみ必要であり、組み込み関数を使用して文字列とともにインデックスを取得します。

for inner in lst:
    for index, string in enumerate(inner):
        inner[index] = float(string)
于 2013-04-14T08:51:34.113 に答える
2

Using map(), here's a simplified example

nums = [['4.58416458379','1.68991195077'], ['8.02595866276'],
    ['3.61503670628', '5.64553650642', '1.39648965337']]

def myFloat(myList):
    return map(float, myList)

map(myFloat, nums)
于 2013-04-14T07:31:14.570 に答える