首页 > 解决方案 > 使用 Python 从 2000 年的列表中提取特定项目?

问题描述

我有下面给定格式的大量数据列表。我需要提取 2000 年的所有数据。但是当我尝试实现它时,我得到一个错误'invalid literal for int() with base 10:'year ''

这是我用来提取数据的代码。它似乎不起作用。

['title','country','year','val',]
['bm','china','1987','2200']
['bm','japan','2000','1600']
['bm','germany','2000','70']
#it doesnt seem to work 
new=[]
for i in list:
    if i[2]==2000:
       new.append(int(i))

标签: pythonpython-3.xlistpython-2.7

解决方案


第一,您应该将变量命名为list,因为list它是 Python 的内置数据类型。您不应变量和函数命名为与内置类型和函数相同的名称。使用其他东西,例如。mylist.

第二,它可能不起作用,因为您将列表包含['title', 'country', 'year', 'val',]在循环中,并且当您尝试将i[2](字符串)转换为 int 时,它会引发错误。"year""year"

一种选择是跳过第一个看起来像标题的列表。

mylist = [
    ['title','country','year','val',],
    ['bm','china','1987','2200'],
    ['bm','japan','2000','1600'],
    ['bm','germany','2000','70']
]

new=[]
for i in mylist[1:]:
    year = int(i[2])
    if year==2000:
       new.append(i)
print(new)
# [['bm', 'japan', '2000', '1600'], ['bm', 'germany', '2000', '70']]

如果您不知道 是否i[2]是有效的整数值,另一种选择是try强制转换它,然后如果它失败则跳过它:

mylist = [
    ['title','country','year','val',],
    ['bm','china','1987','2200'],
    ['bm','japan','2000','1600'],
    ['bm','germany','2000','70']
]

new=[]
for i in mylist:
    try:
        year = int(i[2])
    except ValueError:
        continue
    if year==2000:
        new.append(i)
print(new)
# [['bm', 'japan', '2000', '1600'], ['bm', 'germany', '2000', '70']]

推荐阅读