【问题标题】:Evaluating if variable in list python评估列表python中的变量
【发布时间】:2017-11-08 20:29:15
【问题描述】:

我正在使用 RFID 阅读器扫描多个 RFID 标签。读数被放入列表中。我正在尝试检查标签是否在阅读中。使用“if in”方法对我不起作用。

import mercury
import time

reader = mercury.Reader("tmr:///dev/ttyUSB0")
reader.set_region("EU3")
reader.set_read_plan([1], "GEN2")

tag1 = 'E2004005730702602190360B'
tag2 = 'E20040057307026421903619'

while True:
    a = reader.read()
    print (a)
    print(type(a))
    if tag1 in a:
            print('tag1')
            time.sleep(0.2)
            break
    if tag2 in a:
            print('tag2')
            time.sleep(0.2)
            break
    time.sleep(0.2)

我的终端输出是:

['E20040057307026421903619', 'E2004005730702602190360B']
<type 'list'>

所以当tag1或tag2在a时,if条件不会被执行。

我似乎无法让它进入 if 条件。有什么建议吗?

【问题讨论】:

  • 什么是阅读器?你也可以打印type(a) 吗?并粘贴控制台的输出作为文本而不是作为图像(这样我们可以尝试重现)
  • 感谢您的编辑,很有用,但您能否添加print(a[0],type(a[0]) 来确定items 的类型以及它们是什么? (对不起,我应该早点问)

标签: python list if-statement


【解决方案1】:

事实证明,下面的答案在这里不起作用,因为“阅读器”是文件以外的对象,a 已经是一个列表。对您来说更好的解决方案可能是将您的“if in”更改为 if any(tag1 == tag.epc for tag in a)。在这种情况下,打印会产生误导,因为似乎列表实际上填充了打印为字符串但不会比较等于字符串的对象。

我将保留较早的答案,因为它可能对有类似问题的人有所帮助。

================================================ =========================

假设“阅读器”是一个文件,使用 reader.read() 不会返回一个列表。它返回一个字符串。你不会得到解释器错误,因为字符串是可迭代的,但你也不会得到你期望的结果!

编辑: 使用 string1 in string2 将返回 True,如果 string1 是 string2 的子字符串。不过,还是要小心,因为其他有效的操作(如a[0])会返回意想不到的结果。

试试

import ast
a = ast.literal_eval(reader.read())

这将尝试将.read() 的结果解释为一个列表。如果这对您不起作用,请查看regular expressions

【讨论】:

  • 如果阅读器返回一个字符串,那么if tag1 in a 有效(子字符串测试)。
  • @Jean-FrançoisFabre 你是对的。我做了一个快速测试来验证我的答案,但这样做时我犯了一个错误。我应该只是寻找文档。
  • 这类问题很难解决,因为我们没有 OP 拥有的硬件,所以从 OP 获得最大的信息很重要。我试过了,但忘记了一些要点。让我们等待他的新评论/编辑。
【解决方案2】:

查看the documentation,您似乎没有得到str 的列表,而是TagReadData 对象。

尝试以下方法:

tag1 = b'E2004005730702602190360B'
tag2 = b'E20040057307026421903619'

a = reader.read()
for tag in a:
    if tag1 == tag.epc:
        print('tag1')

【讨论】:

    【解决方案3】:

    您应该适当地打印列表对象 a ( reader.read() ) 的上下文 它会告诉你内容或目的对象,然后了解比较是什么(if 语句)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      相关资源
      最近更新 更多