如何仅转换数组的某些元素?

Aiu*_* YO 0 python arrays

我有一个看起来像这样的数组:['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])
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误:

错误消息:ValueError:float()的无效文字:

Sve*_*ach 8

一个有趣的版本(请不要使用此代码!):

from itertools import cycle
func = cycle((int, float))
new_items = [next(func)(i) for i in items]
Run Code Online (Sandbox Code Playgroud)

编辑:作为一个更严肃的答案,你可能并不真的想要这种混合列表.使用对列表可能更有用,每对的第一项是整数,第二项是浮点数.可以使用您的列表构建此数据结构

new_items = [(int(x), float(y)) for x, y in zip(*[iter(items)] * 2)]
Run Code Online (Sandbox Code Playgroud)


Mic*_*man 5

new_items = [float(item) if index % 2 else int(item)
             for index, item in enumerate(items)]
Run Code Online (Sandbox Code Playgroud)