将一个字符串与一个整数进行比较。

4

我正在学习如何使用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个回答

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 ],这将在单行代码中为您完成所有操作。

谢谢。我的问题实际上是第二个元素是一个字符串而不是整数。 - Ravash Jalil

4
上面的回答非常好,但对于刚开始学习编程的人来说,可能会对以下内容感到困惑:
int(`i[1]`.replace(',',''))

那段代码的作用是获取列表中的元素,例如 ['Porsche', '400,000', '10,000km'],然后找到该列表中的第二个元素,也就是'400,000'。这可以通过使用 i[1] 来实现。
现在你已经找到了要检查的元素,即它是否大于350,000。但是,你拥有的元素是字符串而不是数字。因此,您需要将该字符串转换为整数。
首先要做的是删除特殊字符(逗号)。函数 .replace(',','') 可以通过查找 ',' 并替换为空(有效地删除带有 ',' 的任何内容)来实现这一点。
此时,您已经得到了一个没有任何特殊字符的字符串,将 '400,000' 转换为了 '400000'。现在,您需要将其转换为整数,以便 Python 理解它是小于还是大于 350,000。幸运的是,Python 很容易实现这一点。函数 int() 可以完成所有工作。具体来说,int('400000') 将 '400000' 转换为 40000。
现在,您可以将 400000 与 350000 进行比较,并继续您的日常工作。

说实话,这就是为什么我们需要你在提交代码时包含你所做的事情,即使(尤其是!)当它不起作用时。Justin能够找出问题所在,但你没有给我们任何线索。 - thumbtackthief
是的,Justin,你的回答非常好,但你必须添加代码!我给你加一分! - Bhargav Rao

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接