【问题标题】:python for loop with if statement not returning items带有if语句的python for循环不返回项目
【发布时间】:2018-02-13 21:02:38
【问题描述】:

我正在尝试通过我自己的在线商店的一些基本练习来学习 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)

它不打印任何内容,即使 outofstock 中有未按顺序排列的条目。

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

for part in onorder:
    print (part)

如果我在循环之外尝试此操作,它也可以工作并打印 triwing,因为 triwing 确实在缺货列表中。

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

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

【问题讨论】:

  • 为什么不if part not in order and part in outofstock:
  • print (part) 缩进四个空格。
  • for part in onorder 保证part in onorder 始终为真。
  • 我试过if (part not in onorder) and (part in outofstock):,结果一样。 print (part) 在上面的例子中没有缩进吗?我将查看您对 in 运算符重复项所说的内容。非常感谢!
  • 是的,有两个问题。 if part not in onorder and part in outofstock: 将是正确的方法,如果您实际上并没有首先迭代 onorder,这意味着第一个条件可能永远为 True。

标签: python loops for-loop if-statement


【解决方案1】:
for part in onorder:
    if (part in onorder) == False ...

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      哇!适当的代码是

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

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

      我不敢相信我无缘无故地过于复杂了。非常感谢您指出我哪里出错了。事后看来,这是一个愚蠢的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多