python更新列表上的值匹配

python更新列表上的值匹配,python,Python,我有一列(行[“MenuItemId”]),其中包含某些数字。如果该特定位置中的值与另一个列表中的值匹配,我希望创建一个新列。因此,我想创建一个具有值{45、46和47}的列表,并修改以下代码,并将其替换为列表名称: DfOrders.loc[x,"beef"] = int(row["MenuItemId"] in [45, 46, 47, 50]) 这是我当前的代码 预期产量 如何更改当前代码,以便在位置与列表中的任何项目匹配时,更新相应的值,而不是使用“或”语句手动指定数字:)可能是这样

我有一列(行[“MenuItemId”]),其中包含某些数字。如果该特定位置中的值与另一个列表中的值匹配,我希望创建一个新列。因此,我想创建一个具有值{45、46和47}的列表,并修改以下代码,并将其替换为列表名称:

DfOrders.loc[x,"beef"] = int(row["MenuItemId"] in [45, 46, 47, 50])
这是我当前的代码

预期产量


如何更改当前代码,以便在位置与列表中的任何项目匹配时,更新相应的值,而不是使用“或”语句手动指定数字:)

可能是这样的:

allow=[45,46,47]#此列表中的值决定了条件。你可以很好地操纵它们:)
if allow:#if in是python的标准。
DfOrders.loc[x,“牛肉”]=1
其他:
DfOrders.loc[x,“牛肉”]=0

如果要测试一个数字是否位于整数的连续范围内,最好使用这样的不等式表达式:

if 45 <= row["MenuItemId"] <= 47:
            DfOrders.loc[x,"beef"] = 1
else:
            DfOrders.loc[x,"beef"] = 0
如果要测试的范围不是连续的,则可以将值放置在列表中,并测试列表的成员资格:

DfOrders.loc[x,"beef"] = int(row["MenuItemId"] in [45, 46, 47, 50])
但是,如果要重复使用非连续范围,则将其定义为一个集合更有效

beefy = set([45, 46, 47, 50])
DfOrders.loc[x,"beef"] = int(row["MenuItemId"] in beefy)
这是因为在最坏的情况下,在列表中查找元素所花费的时间与列表的大小成正比,但无论集合的大小如何,在集合中查找元素所花费的时间都是相同的(正式地说,列表的最坏情况查找是线性时间或O(n),其中n是列表的大小,但set lookup time是常量时间,或O(1))

如果您的代码只使用了一次该范围,那么您也可以使用该列表,因为Python必须读取每个元素才能创建该集合

DfOrders.loc[x,"beef"] = int(row["MenuItemId"] in [45, 46, 47, 50])
beefy = set([45, 46, 47, 50])
DfOrders.loc[x,"beef"] = int(row["MenuItemId"] in beefy)