【问题标题】:Compare a string to an integer将字符串与整数进行比较
【发布时间】:2015-03-25 17:01:21
【问题描述】:

我只是在学习如何使用 python 和列表。我有一个类似下面的示例列表。

list = [['Ferrari','200,000','10,000km'],['Porsche','230,000','10,000km'],['Ferrari','150,000','10,000km'],['Ferrari','200,000','10,000km'],['Porsche','230,000','10,000km'],['Porsche','200,210','10,000km'],['Ferrari','110,000','10,000km'],['Porsche','400,000','10,000km'],

我正在尝试运行一个循环来检查每个嵌套列表中的第二个元素是否大于 350,000,然后打印汽车、价格和里程(如果是)。

我使用了不同的 for 循环,其中包含 if 语句,但无法弄清楚。

【问题讨论】:

    标签: python list python-2.7


    【解决方案1】:

    首先不要将变量命名为list,因为它会影响内置函数。

    这是解决问题的一种非常简单的方法

    >>> l = [['Ferrari','200,000','10,000km'],['Porsche','230,000','10,000km'],['Ferrari','150,000','10,000km'],['Ferrari','200,000','10,000km'],['Porsche','230,000','10,000km'],['Porsche','200,210','10,000km'],['Ferrari','110,000','10,000km'],['Porsche','400,000','10,000km']]
    >>> for i in l:
    ...     if (int(i[1].replace(',','')) > 350000):      # Remove all the , in your string and type cast it to an integer
    ...          print i
    ... 
    ['Porsche', '400,000', '10,000km']
    

    您可以像[i for i in l if int(i[1].replace(',','')) > 350000 ] 那样在列表理解中执行此操作,这将在一行中为您完成所有操作

    【讨论】:

    • 谢谢。我的问题实际上是第二个元素是字符串而不是整数。
    【解决方案2】:

    上面的答案非常好,但对于刚开始编程的人来说,您可能会对以下内容感到困惑:

    int(`i[1]`.replace(',',''))
    

    这样做是将您的项目放入列表中,例如['Porsche', '400,000', '10,000km'],然后如果在该列表中找到第二个元素,在本例中为'400,000'。它使用i[1] 执行此操作。

    您现在已经找到要检查的元素是否大于 350,000。但是,您拥有的元素是字符串,而不是数字。您必须将此字符串转换为整数。

    这样做的第一步是删除特殊字符(逗号)。函数.replace(',','') 通过查找',' 并替换为空(有效地删除带有',' 的任何内容)来做到这一点。

    此时你有一个没有任何特殊字符的字符串,你把'400,000'变成了'400000'。你现在必须把它变成一个整数,让 python 来理解它是小于还是大于 350000。谢天谢地,python 让这很容易。函数int() 完成所有工作。具体来说,int('400000') 将 '400000' 变成 40000。

    您现在可以将 400000 与 350000 进行比较,然后继续您的一天。

    【讨论】:

    • FWIW,这就是为什么我们需要您包含您对代码所做的事情,即使(尤其是!)它不起作用。感谢贾斯汀解决了这个问题,但你没有给我们任何继续。
    • 是的,贾斯汀,这是一个非常好的答案,但您一定添加了代码!你会得到我的 +1!
    【解决方案3】:

    Python 的一个优点是可以编写非常易读的代码:

    cars = [['Ferrari','200,000','10,000km'],['Porsche','230,000','10,000km'],
            ['Ferrari','150,000','10,000km'],['Ferrari','200,000','10,000km'],
            ['Porsche','230,000','10,000km'],['Porsche','200,210','10,000km'],
            ['Ferrari','110,000','10,000km'],['Porsche','400,000','10,000km']]
    
    for car, price, mileage in cars:
        if (int(price.replace(',', '')) > 350000):  # convert to int and compare
             print car, price, mileage
    

    它还可以轻松地将字符串转换为数值,其格式可能因国家/地区而异(例如用作千位分隔符的字符)。

    这意味着您也可以这样做,这在其他国家/地区也可以使用(假设列表中的数字是根据其惯例格式化的):

    import locale
    locale.setlocale(locale.LC_ALL, '')  # set locale to platform default
    
    for car, price, mileage in cars:
        if (locale.atoi(price) > 350000):  # convert to int and compare
             print car, price, mileage
    

    【讨论】:

      最近更新 更多