将一串数字转换为数字,并将日期保留为python中的字符串

时间:2015-02-04 16:49:43

标签: python string

应更改列表,以便在每个子列表中将除日期之外的所有元素转换为数字类型(浮点数或整数...以适当者为准)。因此元素[’2014-01-29’, ’1119.12’, ’1121.75’, ’1099.42’, ’1106.92’, ’2379900’, ’1106.92’]将成为[’2014-01-29’, 1119.12, 1121.75, 1099.42, 1106.92, 2379900, 1106.92] 注意:请勿在此处创建其他列表。改变传入的列表。

s = ['4/5/2013', '19.7', '20.35', '19.69', '20.3', '521000', '19.02']
['4/4/2013', '19.5', '19.85', '19.45', '19.85', '527500', '18.6']
['4/3/2013', '19.46', '19.56', '19.36', '19.55', '307800', '18.32']
['4/2/2013', '19.18', '19.52', '19.16', '19.52', '400200', '18.29']
['4/1/2013', '19.08', '19.25', '19.08', '19.21', '168100', '18']
['3/28/2013', '18.9', '19.25', '18.86', '19.19', '331100', '17.98']
['3/27/2013', '18.91', '19.03', '18.75', '19', '341600', '17.8']
['3/26/2013', '18.78', '19.1', '18.6', '19.02', '637900', '17.82']
['3/25/2013', '19', '19.15', '18.38', '18.9', '1244300', '17.71']
['3/22/2013', '19', '19.34', '18.6', '18.86', '10274900', '17.67']

2 个答案:

答案 0 :(得分:0)

使用List-comprehension。

>>> s = ['4/5/2013', '19.7', '20.35', '19.69', '20.3', '521000', '19.02']
>>> [float(i) if not '/' in i else i for i in s]
['4/5/2013', 19.7, 20.35, 19.69, 20.3, 521000.0, 19.02]

答案 1 :(得分:0)

实际上你问题中的数据是一堆字符串列表。以下是如果将它们全部存储在名为s的列表中

的转换方法
s = [['4/5/2013', '19.7', '20.35', '19.69', '20.3', '521000', '19.02'],
     ['4/4/2013', '19.5', '19.85', '19.45', '19.85', '527500', '18.6'],
     ['4/3/2013', '19.46', '19.56', '19.36', '19.55', '307800', '18.32'],
     ['4/2/2013', '19.18', '19.52', '19.16', '19.52', '400200', '18.29'],
     ['4/1/2013', '19.08', '19.25', '19.08', '19.21', '168100', '18'],
     ['3/28/2013', '18.9', '19.25', '18.86', '19.19', '331100', '17.98'],
     ['3/27/2013', '18.91', '19.03', '18.75', '19', '341600', '17.8'],
     ['3/26/2013', '18.78', '19.1', '18.6', '19.02', '637900', '17.82'],
     ['3/25/2013', '19', '19.15', '18.38', '18.9', '1244300', '17.71'],
     ['3/22/2013', '19', '19.34', '18.6', '18.86', '10274900', '17.67']]

for lst in s:
    for i, substring in enumerate(lst):
        for kind in (int, float):
            try:
                lst[i] = kind(substring)
                break  # succeeded
            except ValueError:
                pass  # keep trying (or give-up)
    print(lst)

输出:

['4/5/2013', 19.7, 20.35, 19.69, 20.3, 521000, 19.02]
['4/4/2013', 19.5, 19.85, 19.45, 19.85, 527500, 18.6]
['4/3/2013', 19.46, 19.56, 19.36, 19.55, 307800, 18.32]
['4/2/2013', 19.18, 19.52, 19.16, 19.52, 400200, 18.29]
['4/1/2013', 19.08, 19.25, 19.08, 19.21, 168100, 18]
['3/28/2013', 18.9, 19.25, 18.86, 19.19, 331100, 17.98]
['3/27/2013', 18.91, 19.03, 18.75, 19, 341600, 17.8]
['3/26/2013', 18.78, 19.1, 18.6, 19.02, 637900, 17.82]
['3/25/2013', 19, 19.15, 18.38, 18.9, 1244300, 17.71]
['3/22/2013', 19, 19.34, 18.6, 18.86, 10274900, 17.67]