我对python很新。我正在寻找一个搜索列表和查找数据的解决方案。
我用谷歌搜索但无法找到任何特定于我的代码。我试着找到,设置它似乎不起作用。
我正在尝试搜索并匹配另一个列表中的预定列表中的多个字符串(它实际上是来自串行端口的一个resoponse)
这是我的代码
responsetocheck = "replyid, ID,ID,transmitid"
datafromport= "replyid, ID, timestamp,sometherinfo,someotherinfo1,ID,transmitid"
我必须比较并找到整个responsetocheck,如果所有字符串都与responsetcheck匹配,则返回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
选项可能有一些语法错误。我列出的只是为了让您知道我使用的选项。
答案 0 :(得分:1)
如果我理解正确,你有varibles responsetocheck和来自端口的数据,这两个端口都包含一个字符串,表示你要检查的逗号分隔的单词列表。在这种情况下,您需要在进行比较之前将字符串设置为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)