python - 如何在 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_list
和index[4]
第 4 行my_list
这么短说:
index[2]
对于摩洛哥,我想检查一下index[3]
==0,78
index[2]
对于西班牙,我想检查一下index[3]
==0,40
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
解决方案
这是你想要的吗?
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']
推荐阅读
- php - php mysql更新并重新分配所有行
- c# - ObjcRuntime.Selector 无法处理预期的对象(xamarin)
- angular - Angular 子路由和 404
- sql - 在 Oracle 中合并具有不同值的列
- python - 如何使用正则表达式在熊猫中提取字符串?
- java - 我正在从 DB 填充我的下拉列表,但是在单击提交按钮时,我在我的 java 代码中出现的方法中选择了 null 值
- android - 无法模拟 android.util.Patterns.EMAIL_ADDRESS.pattern()
- vim - yaml文件的注释行时vim错误缩进
- mysql - SQL 在所有日期早于 x 的条目中查找最高日期
- gitlab - gitlab MR中过时的差异是什么?