如何在python中比较list/array/dict中的对应元素
How to compare corresponding elements in list/array/dict in python
假设您有两个列表(或任何类型的分组,哪个并不重要)包含代表牛奶、鸡蛋和面粉的变量。例如:
有(牛奶、鸡蛋、面粉)
和
需要(牛奶、鸡蛋、面粉)
您如何确定每个元素是否 >=、== 或 <= 其在另一个列表中的对应项,以便您可以 return 一些关于是否存在足够或不足的指示每种成分都可以制作众所周知的蛋糕,还是足以制作一个以上的蛋糕?
我真的不想为了3个比较而写War和Peace。感谢任何帮助。
你可以用字典。例如:
have = {"milk": 2, "eggs": 3, "flour": 0.5}
need = {"milk": 1, "eggs": 5, "flour": 2.5}
ingredients = {i:"Yes" if have[i] >= need[i] else "No" for i in have.keys()}
输出:
print(ingredients)
{'milk': 'Yes', 'eggs': 'No', 'flour': 'No'}
如果你想要一个函数来告诉你用你拥有的原料可以做多少蛋糕,你可以使用以下方法:
def how_many(need, have):
results = {i:have[i]//need[i] for i in have.keys()}
return min(results.values())
如果您需要比较的数量列表,您可以使用 one-liner 列表理解(只能比较 ==、>、< 否则如果您使用 >= 它们将重叠操作和 <= 和 ==) -
milk_have = 10
eggs_have = 20
flour_have = 30
milk_need = 10
eggs_need = 25
flour_need = 3
have = [milk_have, eggs_have, flour_have]
need = [milk_need, eggs_need, flour_need]
['==' if i[0]==i[1] else '>' if i[0]>i[1] else '<' for i in zip(have, need)]
['==', '<', '>']
假设输入如下
milk=200
eggs=10
flour=1000
milk_reqd=100
eggs_reqd=5
flour_reqd=2000
have=[milk, eggs, flour]
need=[milk_reqd, eggs_reqd, flour_reqd]
解决方案
import numpy as np
have=np.array(have)
need=np.array(need)
现在您可以执行所有操作,例如
need>have
或
need<=have
或
need-have
获取可制作的蛋糕数量
n_cakes=int(min(have/need))
have = ('milk', 'eggs', 'flour',"k")
need = ('milk', 'eggs', 'flour',"l")
incredients = {}
for i in range(len(have)):
count = 0
if have[i] == need[i]:
count +=1
incredients[have[i]] = count
输出:{'eggs': 1, 'flour': 1, 'k': 0, 'milk': 1}
假设您有两个列表(或任何类型的分组,哪个并不重要)包含代表牛奶、鸡蛋和面粉的变量。例如:
有(牛奶、鸡蛋、面粉)
和
需要(牛奶、鸡蛋、面粉)
您如何确定每个元素是否 >=、== 或 <= 其在另一个列表中的对应项,以便您可以 return 一些关于是否存在足够或不足的指示每种成分都可以制作众所周知的蛋糕,还是足以制作一个以上的蛋糕?
我真的不想为了3个比较而写War和Peace。感谢任何帮助。
你可以用字典。例如:
have = {"milk": 2, "eggs": 3, "flour": 0.5}
need = {"milk": 1, "eggs": 5, "flour": 2.5}
ingredients = {i:"Yes" if have[i] >= need[i] else "No" for i in have.keys()}
输出:
print(ingredients)
{'milk': 'Yes', 'eggs': 'No', 'flour': 'No'}
如果你想要一个函数来告诉你用你拥有的原料可以做多少蛋糕,你可以使用以下方法:
def how_many(need, have):
results = {i:have[i]//need[i] for i in have.keys()}
return min(results.values())
如果您需要比较的数量列表,您可以使用 one-liner 列表理解(只能比较 ==、>、< 否则如果您使用 >= 它们将重叠操作和 <= 和 ==) -
milk_have = 10
eggs_have = 20
flour_have = 30
milk_need = 10
eggs_need = 25
flour_need = 3
have = [milk_have, eggs_have, flour_have]
need = [milk_need, eggs_need, flour_need]
['==' if i[0]==i[1] else '>' if i[0]>i[1] else '<' for i in zip(have, need)]
['==', '<', '>']
假设输入如下
milk=200
eggs=10
flour=1000
milk_reqd=100
eggs_reqd=5
flour_reqd=2000
have=[milk, eggs, flour]
need=[milk_reqd, eggs_reqd, flour_reqd]
解决方案
import numpy as np
have=np.array(have)
need=np.array(need)
现在您可以执行所有操作,例如
need>have
或
need<=have
或
need-have
获取可制作的蛋糕数量
n_cakes=int(min(have/need))
have = ('milk', 'eggs', 'flour',"k")
need = ('milk', 'eggs', 'flour',"l")
incredients = {}
for i in range(len(have)):
count = 0
if have[i] == need[i]:
count +=1
incredients[have[i]] = count
输出:{'eggs': 1, 'flour': 1, 'k': 0, 'milk': 1}