0

私は次のような配列を持っています:['14', '43.8303', '13', '44.8114', '16', '45.6076', '7', '45.6762', '2', '45.8241', '18', '46.0605', '8', '47.7897', '4', '53.4238', '1', '53.5724', '15', '54.0245', '17', '54.1073', '9', '58.2705', '3', '61.0334', '5', '62.0799', '12', '70.6712', '11', '81.171', '10', '196.992', '6', '314.895']

int偶数位置の要素をに、奇数位置の要素をに変換することは可能floatですか?

私はこのようにそれを試しました:

for i in range(36):
        if i%2==0:
            items[i] = map(int, items[i])
        else:
            items[i] = map(float,items[i])

ただし、次のエラーが発生します。

エラーメッセージ:ValueError:float()のリテラルが無効です:

4

5 に答える 5

8

楽しいバージョン (このコードは使用しないでください!):

from itertools import cycle
func = cycle((int, float))
new_items = [next(func)(i) for i in items]

編集:より深刻な答えとして、おそらくこの種の混合リストは本当に必要ありません。各ペアの最初の項目が整数で、2 番目の項目が浮動小数点数である、ペアのリストを使用する方が便利な場合があります。このデータ構造は、次を使用してリストから構築できます

new_items = [(int(x), float(y)) for x, y in zip(*[iter(items)] * 2)]
于 2012-06-15T13:42:58.977 に答える
5
new_items = [float(item) if index % 2 else int(item)
             for index, item in enumerate(items)]
于 2012-06-15T13:42:52.540 に答える
1

Michael Hoffman のソリューションをお勧めしますが、コードのエラーを知っておくと役立つ場合があります。

for i in range(36):
    if i%2==0:
        items[i] = map(int, items[i])
        # should be: items[i] = int(items[i])
    else:
        items[i] = map(float,items[i])
        # should be: items[i] = float(items[i])

mapリストの各要素に対して関数を呼び出しますが、この場合は、既にループしているため、個々の要素に対してintandを呼び出したいと考えています。floatitems[i]

(また、 でfor i in range(26)あるべきですfor i in range(len(items))。マジック定数は使用しないでください。)

于 2012-06-15T13:44:32.270 に答える
1

スライスを使用すると、リストをその場で更新できます。(新しいリストを作成する他のいくつかのソリューションとは対照的に -- 違いは微妙で、場合によっては重要ではありませんが、とにかく何をしているのかを知ることは良いことです)。

a[::2]=map(int,a[::2])
a[1::2]=map(float,a[1::2])

a[::2]0 からa[1::2]始まる 1 つおきの要素を取得し、1 から始まる 1 つおきの要素を取得します。

または、必要に応じてリスト内包表記...

a[::2]=[int(x) for x in a[::2]]
a[1::2]=[float(x) for x in a[1::2]]
于 2012-06-15T13:52:17.630 に答える
0

あなたのソリューションに従ってください:

for i in range(36):
    if i%2==0:
        items[i] = int(items[i])
    else:
        items[i] = float(items[i])
于 2012-06-15T13:43:09.347 に答える