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