首页 > 解决方案 > 如何在 Python 中比较两个列表中的值?

问题描述

我有 2 个列表:

my_values = ['0,78', '0,40', '0,67']

my_list = [
    ['Morocco', 'Meat', '190,00', '0,15'], 
    ['Morocco', 'Meat', '189,90', '0,32'], 
    ['Morocco', 'Meat', '189,38', '0,44'],
    ['Morocco', 'Meat', '188,94', '0,60'],
    ['Morocco', 'Meat', '188,49', '0,78'],
    ['Morocco', 'Meat', '187,99', '0,101'],
    ['Spain', 'Meat', '190,76', '0,10'], 
    ['Spain', 'Meat', '190,16', '0,20'], 
    ['Spain', 'Meat', '189,56', '0,35'],
    ['Spain', 'Meat', '189,01', '0,40'],
    ['Spain', 'Meat', '188,13', '0,75'],
    ['Spain', 'Meat', '187,95', '0,78'],
    ['Italy', 'Meat', '190,20', '0,11'],
    ['Italy', 'Meat', '190,10', '0,31'], 
    ['Italy', 'Meat', '189,32', '0,45'],
    ['Italy', 'Meat', '188,61', '0,67'],
    ['Italy', 'Meat', '188,01', '0,72'],
    ['Italy', 'Meat', '187,36', '0,80'],
]

我有一个正在检查以下内容的代码:

  1. 对于摩洛哥,它检查里面index[2] my_list什么index[3] my_values == 0,78
  2. 对于西班牙,它会检查里面index[2] my_list 什么index[3] my_values == 0,40
  3. 对于意大利,它会检查index[2] n my_list 所在index[3]的位置 my_values == 0,67

现在我有一个问题,正如你所看到0,78my_values,摩洛哥和西班牙都有,我只希望它检查摩洛哥。

这是我的代码:

yet_another_list = [i[2] for i in my_list if i[3] in my_values]
print(yet_another_list)

这是我的输出:

['188,49', '189,01', '187,95', '188,61']

这是我的首选输出:

['188,49', '189,01', '188,61']

如您所见,我只想index[1]用于my_values,Moroccoindex[2]Spain...请注意,在我的官方数据集中my_lists包含更多国家...

#添加。我什至尝试过 Pandas,但仍然收到相同的输出。

df=pd.DataFrame(my_list)
df['Filter']=np.where([i in my_values for i in df[3]],"Yes","")
my_out_list=list(df[2][df['Filter']=='Yes'])

print(my_out_list)

>> 
['188,49', '189,01', '187,95', '188,61']

标签: pythonlistindexing

解决方案


我建议使用字典,然后过滤您的数据集

my_values = {'Morocco': '0,78', 'Spain': '0,40', 'Italy': '0,67'}

my_list = [
    ['Morocco', 'Meat', '190,00', '0,15'], 
    ['Morocco', 'Meat', '189,90', '0,32'], 
    ['Morocco', 'Meat', '189,38', '0,44'],
    ['Morocco', 'Meat', '188,94', '0,60'],
    ['Morocco', 'Meat', '188,49', '0,78'],
    ['Morocco', 'Meat', '187,99', '0,101'],
    ['Spain', 'Meat', '190,76', '0,10'], 
    ['Spain', 'Meat', '190,16', '0,20'], 
    ['Spain', 'Meat', '189,56', '0,35'],
    ['Spain', 'Meat', '189,01', '0,40'],
    ['Spain', 'Meat', '188,13', '0,75'],
    ['Spain', 'Meat', '187,95', '0,78'],
    ['Italy', 'Meat', '190,20', '0,11'],
    ['Italy', 'Meat', '190,10', '0,31'], 
    ['Italy', 'Meat', '189,32', '0,45'],
    ['Italy', 'Meat', '188,61', '0,67'],
    ['Italy', 'Meat', '188,01', '0,72'],
    ['Italy', 'Meat', '187,36', '0,80'],
]


print([e[2] for e in filter(lambda x: x[3] == my_values[x[0]], my_list)])

>>> ['188,49', '189,01', '188,61']

附带说明一下,如果您正在处理更大的数据集,那么查看pandas包可能会有所帮助,这是一个流行的用于数据分析的 Python 库


推荐阅读