0

我对python很陌生。我正在寻找搜索列表和查找数据的解决方案。

我用谷歌搜索,但找不到任何特定于我的代码的内容。我尝试在设置中查找它似乎不起作用。

我正在尝试在另一个列表中的预定义列表中搜索和匹配多个字符串(它实际上是来自串行端口的响应)

这是我的代码

responsetocheck = "replyid, ID,ID,transmitid"

datafromport= "replyid, ID, timestamp,sometherinfo,someotherinfo1,ID,transmitid"

如果所有字符串都与 responsetocheck 匹配,我必须比较并找到整个 responsetocheck 并返回 true。

我在下面给出的选项中尝试了这些

if (responsetocheck  in datafromport)  # it's not finding the data

if (set(responsetocheck) <= set(datafromport) )  # returns True even if 2- 3 values
                                                 # are matching - the reverse way of
                                                 # checking just returns true though
                                                 # if just one matches.

responsetocheck[0] in datafromport [0] # and the respective index's : getting 
                                       # out of range error

 if all(word in data for word in response) # doesnt seem to work as well

选项可能有一些语法错误。我列出来只是为了让您知道我使用过的选项。

4

1 回答 1

1

如果我对您的理解正确,则您有变量 responsetocheck 和 datafrom 端口,它们都包含一个字符串,该字符串表示您要检查的以逗号分隔的单词列表。在这种情况下,您需要在进行比较之前将您的字符串放入 python 列表中。像这样:

responsetocheck = responsetocheck.replace(' ','').split(',')
datafromport = datafromport.replace(' ', '').split(',')

您现在有两个如下所示的列表:

['replyid', 'ID', 'ID', 'transmitid'] #responsetocheck
['replyid', 'ID', 'timestamp', 'sometherinfo', 'someotherinfo1', 'ID', 'transmitid'] # datafromport

然后你必须遍历 responsetocheck 列表中的每个单词并检查它是否在 datafromport 列表中找到。下面的代码应该给你你想要的结果(如果我理解正确的话):

all(s in datafromport for s in responsetocheck)
于 2013-04-28T09:58:10.367 回答