例如,考虑Python中包含字母和数字字符串的列表
a = ['Total', '1', '4', '5', '2']
如何将其转换为混合值列表
b = ['Total', 1.0, 4.0, 5.0, 2.0]
请注意,一般情况下,我们可能不知道字母字符串在列表中的位置,即我们可能
a = ['Total', '1', '4', 'Next', '2']
答案 0 :(得分: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]
答案 1 :(得分:4)
只需转换除第一列之外的所有内容:
b = a[:1] + [float(i) for i in a[1:]]
从your other question来判断你正在处理一个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
方法,但是为什么在预先知道哪些列包含文本以及哪些列具有数值时会产生开销?
答案 2 :(得分:0)
假设您的最终目标不是csv包,我建议使用pandas.read_csv。