如何有选择地将列表中的元素从字符串转换为整数

2024-09-29 17:12:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个基本的问题,但这给我带来了一些困难,我想也许有人能帮我解决。你知道吗

我的问题与列表理解有关。我有这样的数据,我想做的是将列1、2和3转换成整数。你知道吗

['airport', '2007', '175702', '32788']
['airport', '2008', '173294', '31271']
['request', '2005', '646179', '81592']
['request', '2006', '677820', '86967']
['request', '2007', '697645', '92342']
['request', '2008', '795265', '125775']
['wandered', '2005', '83769', '32682']
['wandered', '2006', '87688', '34647']
['wandered', '2007', '108634', '40101']
['wandered', '2008', '171015', '64395']

我尝试了如下代码:

test = [map(int,x) for x in raw_csv]

但是当我运行这个并打印结果时,我得到一个空列表。如果有人知道如何做到这一点,我真的很感激你告诉我怎么做。谢谢你的时间。你知道吗


Tags: csv数据代码intestmap列表for
3条回答

如果您知道第一列是非int列,而后面的列是int列,并且这将保持不变,那么

result = [line[:1] + map(int, line[1:]) for line in lines]

假设这个结构,这是我能想到的最简单的方法来得到你想要的东西。你知道吗

我觉得你的地图语法有点错误。你知道吗

In [2]: stuff = [['airport', '2007', '175702', '32788'],
['airport', '2008', '173294', '31271'],
['request', '2005', '646179', '81592'],
['request', '2006', '677820', '86967'],
['request', '2007', '697645', '92342'],
['request', '2008', '795265', '125775'],
['wandered', '2005', '83769', '32682'],
['wandered', '2006', '87688', '34647'],
['wandered', '2007', '108634', '40101'],
['wandered', '2008', '171015', '64395'],]
In [4]: map(lambda x: [x[0], int(x[1]), int(x[2]), int(x[3])], stuff)
Out[4]: 
[['airport', 2007, 175702, 32788],
 ['airport', 2008, 173294, 31271],
 ['request', 2005, 646179, 81592],
 ['request', 2006, 677820, 86967],
 ['request', 2007, 697645, 92342],
 ['request', 2008, 795265, 125775],
 ['wandered', 2005, 83769, 32682],
 ['wandered', 2006, 87688, 34647],
 ['wandered', 2007, 108634, 40101],
 ['wandered', 2008, 171015, 64395]]

我会写一个简单的生成器:

def safe_ints(sequence):
    for item in sequence
        try:
            yield int(item)
        except ValueError:
            yield item

test = [safe_ints(row) for row in rows]

编辑:如OP所愿,如果转换失败,项目将按原样返回。你知道吗

或者只是一个简单的函数,在单个令牌上工作:

def try_int(val):
    try:
        return int(val)
    except ValueError:
        return val
test = [map(try_int, row) for row in rows]

相关问题 更多 >

    热门问题