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

问题描述

我有以下 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,85'],
    ['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']]

my_list现在对于我想检查的每个列表中的index[2]index[3]等于my_values. index[2]第 3 行my_listindex[4]第 4 行my_list这么短说:

  1. index[2]对于摩洛哥,我想检查一下index[3]==0,78
  2. index[2]对于西班牙,我想检查一下index[3]==0,40
  3. index[2]对于意大利,我想检查一下index[3]==0,67

这是我试过的代码:

my_answers = []
for key,sublists in itertools.groupby(my_list,lambda y:y[0]): 
    v = min(x for x in sublists if float(x[3].replace(',', '.')) == x for x in my_values); 
    my_answers.append(v[-2])
    
print(my_answers)

这是我收到的:

ValueError: min() arg is an empty sequence

这是我所期望的:

188,49
189,01
188,61

标签: pythonlistlambdaitertools

解决方案


这是你想要的吗?

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,85'],
    ['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("\n".join(i[2] for i in my_list if i[3] in my_values))

输出:

188,49
189,01
188,61

这是单线的作用:

  • 循环遍历您的列表my_list并检查每个子列表中的值与列表的[3]索引my_value
  • 如果条件是True,它“保留”索引中的值[2]
  • 最后它加入了所有与values上述匹配的内容,例如189,01
  • 顺便说一句,这i[2] for i in my_list if i[3] in my_values是一个发电机
  • "\n"是换行符

编辑:

如果您希望输出在列表中,只需执行以下操作:

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

这给了你:

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

推荐阅读