как искать и находить несколько строк из заранее определенного списка в другой список в python

Я совсем новичок в питоне. Я ищу решение для поиска списка и поиска данных.

Я гуглил, но не смог найти ничего конкретного для моего кода. я пытался найти, в, установить это, кажется, не работает.

Я пытаюсь найти и сопоставить несколько строк в заранее определенном списке в другом списке (на самом деле это ответ от последовательного порта)

это мой код

responsetocheck = "replyid, ID,ID,transmitid"

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

Я должен сравнить и найти весь responsetocheck и вернуть true, если все строки совпадают с responsetocheck.

Я пробовал эти приведенные ниже варианты

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

Опции могут иметь некоторую синтаксическую ошибку. Я перечислил только для того, чтобы сообщить вам о вариантах, которые я использовал.


person user2323300    schedule 26.04.2013    source источник
comment
не могли бы вы сделать отступ в своем коде?   -  person Bartlomiej Lewandowski    schedule 26.04.2013
comment
Что именно вы хотите сделать? Вы не показали никаких списков строк. responsetocheck — это одна строка, как и datafromport. Какое именно условие вы хотите проверить на этих строках?   -  person Lev Levitsky    schedule 26.04.2013
comment
извините за это, это просто список, и я намерен сравнить два списка, но это не совпадение один к одному, но мне нужно найти все значения в ответ.   -  person user2323300    schedule 26.04.2013
comment
извините за это, это просто список, и я намерен сравнить два списка, но это не совпадение один к одному, но мне нужно найти все значения в ответ. Сценарий: я читаю последовательные данные через последовательный порт, который передает некоторые данные каждую минуту, и список данных обновляется всякий раз, когда последовательный порт отправляет сообщение, и мне нужно каждый раз проверять, соответствует ли он всему содержимому с моим предопределенным ответом и если он совпадает с данными, то я должен вернуть, что получатель нашел данные. но заданный список ответов не совпадает один к одному со списком данных.   -  person user2323300    schedule 27.04.2013


Ответы (1)


Если я вас правильно понял, у вас есть переменные responsetocheck и datafrom ports, обе из которых содержат строку, представляющую список слов, разделенных запятыми, которые вы хотите проверить. В этом случае вам нужно превратить свои строки в списки 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)
person espensb    schedule 28.04.2013
comment
Я думаю, что ОП может искать список совпадающих элементов, и в этом случае all() будет просто пониманием списка [...]. Вы также можете использовать set/union: list( set(lista) & set(listb) ) - person mfitzp; 28.04.2013
comment
Привет, espensb, Большое спасибо за ваш ответ, я попробовал, как вы предложили, но, похоже, это тоже не работает. Я получаю сообщение об ошибке, поскольку «объект списка не имеет атрибута «заменить» - person user2323300; 29.04.2013
comment
извините, я должен был упомянуть, что на самом деле это список из одной строки, я мог бы разделить список. Но почему-то я не мог их сравнить и отфильтровать правильные данные. хотя я получаю правильные данные из последовательного порта - person user2323300; 29.04.2013
comment
Таким образом, значение «datafromport» на самом деле [ответ, идентификатор, отметка времени, какая-то информация, какая-то другая информация1, идентификатор, идентификатор передачи]? В этом случае вы можете просто использовать 'datafromport = datafromport[0]', прежде чем делать то, что я описал выше. В любом случае, я предлагаю вам привести несколько примеров того, как именно выглядят значения «datafromport» и «responsetocheck». - person espensb; 29.04.2013
comment
Здравствуйте, код выглядит так: ,1,12457.890,09,00,rangepule,98,00 , индекс списка продолжает меняться для каждого получаемого входа, поэтому опция индекса также не работает. - person user2323300; 29.04.2013
comment
Я нашел аналогичный запрос в Поиск значений списка в list и теперь моя проблема решена, спасибо всем за ответ - person user2323300; 29.04.2013