2

例如,考虑 Python 中包含字母和数字字符串的列表

a = ['Total', '1', '4', '5', '2']

如何将其转换为混合值列表

b = ['Total', 1.0, 4.0, 5.0, 2.0]

请注意,通常我们可能不知道字母字符串在列表中的位置,即我们可能有

a = ['Total', '1', '4', 'Next', '2']
4

3 回答 3

5

您可以使用生成器函数和异常处理:

>>> 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]
于 2013-05-27T22:35:46.883 回答
4

只需转换除第一列之外的所有内容:

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方法,但是当预先知道哪些列有文本以及哪些列有数值时,为什么会产生开销呢?

于 2013-05-27T22:36:13.960 回答
0

假设您的最终目标不是 csv 包,我建议您使用 pandas.read_csv。

于 2013-05-27T22:59:10.250 回答