python for循环使用if语句不返回项目

时间:2018-02-13 21:02:38

标签: python loops for-loop if-statement

我正在尝试通过我自己的在线商店的一些基本练习来学习python。我有一份我们已经订购过的零件清单,我有一份我们目前缺货的零件清单。我希望能够向供应商发送我们需要的清单 - 但我不想因为订单中的零件被列为缺货而创建重复订单。

我把这个基本程序放在一起,查看了缺货商品清单,只打印了该商品,如果它出现在过剩商品清单中,但出现在订单列表中,那么如果它是订单我们不再订购。但是,它什么也没输出。

onorder = ["A1417", "A1322", "ISL6259", "LP8545B1SQ", "PM6640", "SLG3NB148V", "PD4HDMIREG", "338S1201", "SN2400B0", "AD7149", "J3801", "J4502", "IPRO97B"]
outofstock = ["ISL6259", "LY-UVH900", "triwing", "banana-to-alligator", "LP8548B1SQ", "EDP-J9000-30-PIN-IPEX", "J3801", "LT3470", "PM6640", "SN2400B0", "IPRO97B", "SLG3NB148V", "SN2400AB0", "usbammeter", "821-00814-A", "J5713", "343S0645", "PMCM4401VPE", "J4502", "PMD9645", "J9600", "J2401", "AD7149", "593-1604", "821-1722", "LM3534TMX", "U4001"]

for part in onorder:
    if (part in onorder) == False and (part in outofstock) == True:
    print (part)

它不会打印任何东西,即使有超量的条目没有订购。

如果我在循环之外尝试这个,它可以工作并打印在订单列表中的每个部分。

for part in onorder:
    print (part)

如果我在一个循环之外尝试这个,它也可以起作用并打印出三重奏,因为三叶草确实存在于出售资料中。

if ('triwing' in outofstock) == True:
    print ("triwing")

但是,for循环中的程序不返回任何内容。我错过了什么?

3 个答案:

答案 0 :(得分:3)

for part in onorder:
    if (part in onorder) == False ...

这没有意义。由于您正在迭代onorder的每个元素,因此part永远不会得到onorder。因此,不执行print语句并不奇怪。

答案 1 :(得分:2)

您正在循环错误的列表。要查找outofstock但不在onorder中的项目,请循环outofstock

for part in outofstock:
    if part not in onorder:
        print(part)

更简单的方法是将两个列表转换为集合,并计算差异:

print(set(outofstock) - set(onorder))

答案 2 :(得分:0)

卫生署!适当的代码是

for part in outofstock:
if (part not in onorder):
    print (part)

这样它会打印我需要订购的缺货商品,除非他们已经订购。

我无法相信我没有充分理由过度复杂。非常感谢你指出我出错的地方。事后看来,这是一个如此愚蠢的问题。