cara mencari dan menemukan banyak string dari daftar yang telah ditentukan sebelumnya ke daftar lain dengan python

Saya cukup baru mengenal python. Saya mencari solusi untuk mencari daftar dan menemukan data.

Saya mencari di Google tetapi tidak dapat menemukan sesuatu yang spesifik untuk kode saya. saya mencoba mencari, di, mengatur sepertinya tidak berhasil.

Saya mencoba mencari dan mencocokkan beberapa string dalam daftar yang telah ditentukan sebelumnya di daftar lain (sebenarnya ini adalah tanggapan dari port serial)

Ini kode saya

responsetocheck = "replyid, ID,ID,transmitid"

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

Saya harus membandingkan dan menemukan seluruh respon untuk diperiksa dan mengembalikan nilai true jika semua string cocok dengan respon untuk diperiksa.

Saya mencoba opsi yang diberikan di bawah ini

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

Opsinya mungkin mengalami kesalahan sintaksis. Saya telah membuat daftar hanya untuk memberi tahu Anda tentang opsi yang telah saya gunakan.


person user2323300    schedule 26.04.2013    source sumber
comment
bisakah Anda membuat indentasi kode Anda?   -  person Bartlomiej Lewandowski    schedule 26.04.2013
comment
Apa sebenarnya yang ingin Anda lakukan? Anda belum menampilkan daftar string apa pun. responsetocheck adalah string tunggal, begitu pula datafromport. Kondisi apa sebenarnya yang ingin Anda uji pada string ini?   -  person Lev Levitsky    schedule 26.04.2013
comment
maaf untuk itu, ini hanya daftar dan niat saya adalah membandingkan dua daftar tetapi tidak cocok satu lawan satu, saya masih perlu menemukan semua nilai sebagai tanggapan.   -  person user2323300    schedule 26.04.2013
comment
maaf untuk itu, ini hanya daftar dan niat saya adalah membandingkan dua daftar tetapi tidak cocok satu lawan satu, saya masih perlu menemukan semua nilai sebagai tanggapan. Skenarionya adalah saya membaca data serial melalui port serial yang mengirimkan beberapa data setiap satu menit dan daftar data diperbarui setiap kali port serial mengirimkan pesan dan saya perlu memeriksa setiap kali apakah itu cocok dengan semua konten dengan respons yang telah saya tentukan sebelumnya dan jika cocok dengan datanya, maka saya harus mengembalikan bahwa penerima telah menemukan datanya. tetapi daftar respons yang telah ditentukan sebelumnya tidak cocok satu lawan satu dengan daftar data.   -  person user2323300    schedule 27.04.2013


Jawaban (1)


Jika saya memahami Anda dengan benar, Anda memiliki variabel respon untuk memeriksa dan data dari port yang keduanya berisi string yang mewakili daftar kata yang dipisahkan koma yang ingin Anda periksa. Dalam hal ini Anda perlu membuat string Anda menjadi daftar python sebelum melakukan perbandingan. Seperti ini:

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

Anda sekarang memiliki dua daftar yang terlihat seperti ini:

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

Kemudian Anda harus mengulangi setiap kata dalam daftar respons untuk memeriksa dan memeriksa apakah kata tersebut ditemukan dalam daftar data dari port. Kode berikut akan memberikan hasil yang Anda inginkan (Jika saya memahami Anda dengan benar):

all(s in datafromport for s in responsetocheck)
person espensb    schedule 28.04.2013
comment
Saya pikir OP mungkin mencari daftar elemen yang cocok, dalam hal ini all() hanya akan menjadi pemahaman daftar [...]. Anda juga bisa menggunakan set/union: list( set(lista) & set(listb) ) - person mfitzp; 28.04.2013
comment
Hai espensb, Terima kasih banyak atas tanggapan Anda, saya mencoba seperti yang Anda sarankan; tetapi sepertinya tidak berhasil juga. Saya mendapatkan kesalahan karena 'objek daftar tidak memiliki atribut' ganti ' - person user2323300; 29.04.2013
comment
maaf saya seharusnya menyebutkannya, sebenarnya ini adalah daftar satu string, saya dapat membagi daftarnya. Tetapi entah bagaimana saya tidak dapat membandingkannya dan memfilter data yang benar. meskipun saya mendapatkan data yang benar dari port serial - person user2323300; 29.04.2013
comment
Jadi nilai 'datafromport' sebenarnya adalah [replyid, ID, timestamp,sometherinfo,someotherinfo1,ID,transmitid]? Dalam hal ini Anda cukup menggunakan 'datafromport = datafromport[0]' sebelum melakukan apa yang saya jelaskan di atas. Bagaimanapun, saya sarankan Anda memberikan beberapa contoh tentang apa sebenarnya nilai 'datafromport' dan 'responsetocheck'. - person espensb; 29.04.2013
comment
Hai, kodenya seperti ini responcheck = $VR,1,2,Txstationdata datafromport = $VR,1,12454.789,09,00,2,TxStationdata port data terus diperbarui setiap kali menerima data dari port serial seperti datafromport= $VR ,1,12457.890,09,00,rangepule,98,00 , indeks daftar terus berubah untuk setiap input yang diterimanya, jadi opsi indeks tidak berfungsi dengan baik - person user2323300; 29.04.2013
comment
Saya telah menemukan kueri serupa di Mencari nilai daftar di list dan masalah saya sudah teratasi sekarang, terima kasih atas tanggapan Anda - person user2323300; 29.04.2013