将字符串与整数进行比较

时间:2015-03-25 17:01:22

标签: python list python-2.7

我正在学习如何使用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语句,但无法弄明白。

3 个答案:

答案 0 :(得分:6)

首先不要将变量命名为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 ]中的列表理解来执行此操作,它将在一行中为您完成所有操作

答案 1 :(得分:4)

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

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并随着您的一天移动。

答案 2 :(得分: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