วิธีค้นหาและค้นหาหลายสตริงจากรายการที่กำหนดไว้ล่วงหน้าไปยังรายการอื่นใน python

ฉันค่อนข้างใหม่กับหลาม ฉันกำลังมองหาวิธีแก้ปัญหาสำหรับการค้นหารายการและค้นหาข้อมูล

ฉันค้นหาใน Google แล้ว แต่ไม่พบสิ่งใดที่เฉพาะเจาะจงสำหรับรหัสของฉัน ฉันพยายาม find, in ,set ดูเหมือนจะไม่ทำงาน

ฉันกำลังพยายามค้นหาและจับคู่สตริงหลายรายการในรายการที่กำหนดไว้ล่วงหน้าในรายการอื่น (จริงๆ แล้วเป็นการตอบกลับจากพอร์ตอนุกรม)

นี่คือรหัสของฉัน

responsetocheck = "replyid, ID,ID,transmitid"

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

ฉันต้องเปรียบเทียบและค้นหาการตอบกลับทั้งหมดและส่งคืนค่าจริงหากสตริงทั้งหมดตรงกับการตอบกลับในการตรวจสอบ

ฉันลองตัวเลือกเหล่านี้ด้านล่าง

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
ขออภัย มันเป็นเพียงรายการ และความตั้งใจของฉันคือเปรียบเทียบสองรายการ แต่ยังไม่ตรงกันแบบหนึ่งต่อหนึ่ง ฉันยังคงต้องหาค่าทั้งหมดเพื่อตอบกลับ สถานการณ์สมมติคือฉันกำลังอ่านข้อมูลอนุกรมผ่านพอร์ตอนุกรมซึ่งจะส่งข้อมูลบางส่วนทุกๆ 1 นาทีและรายการข้อมูลจะได้รับการอัปเดตทุกครั้งที่พอร์ตอนุกรมส่งข้อความ และฉันต้องตรวจสอบทุกครั้งว่าตรงกับเนื้อหาทั้งหมดที่มีการตอบกลับที่กำหนดไว้ล่วงหน้าของฉันหรือไม่ และถ้ามันตรงกับ data ฉันควรส่งคืนว่าผู้รับพบข้อมูลแล้ว แต่รายการตอบกลับที่กำหนดไว้ล่วงหน้าไม่ตรงกับรายการข้อมูลแบบหนึ่งต่อหนึ่ง   -  person user2323300    schedule 27.04.2013


คำตอบ (1)


ถ้าฉันเข้าใจคุณถูกต้อง คุณจะมีตัวแปร responsetocheck และ datafrom พอร์ตที่ทั้งสองมีสตริงที่แสดงรายการคำที่คั่นด้วยเครื่องหมายจุลภาคที่คุณต้องการตรวจสอบ ในกรณีนั้น คุณต้องทำให้สตริงของคุณเป็นรายการหลามก่อนที่จะทำการเปรียบเทียบ แบบนี้:

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

ตอนนี้คุณมีสองรายการที่มีลักษณะดังนี้:

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

จากนั้นคุณจะต้องวนซ้ำแต่ละคำในรายการการตอบกลับและตรวจสอบว่าพบอยู่ในรายการ datafromport หรือไม่ รหัสต่อไปนี้ควรให้ผลลัพธ์ที่คุณต้องการ (ถ้าฉันเข้าใจคุณถูกต้อง):

all(s in datafromport for s in responsetocheck)
person espensb    schedule 28.04.2013
comment
ฉันคิดว่า OP อาจกำลังมองหารายการองค์ประกอบที่ตรงกัน ซึ่งในกรณีนี้ 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' จริง ๆ แล้วคือ [replyid, ID, timestamp, sometherinfo, someotherinfo1, ID, transmitid]? ในกรณีนั้น คุณสามารถใช้ 'datafromport = datafromport[0]' ก่อนทำสิ่งที่ฉันอธิบายไว้ข้างต้น อย่างไรก็ตาม ฉันขอแนะนำให้คุณยกตัวอย่างว่าค่าของ 'datafromport' และ 'responsetocheck' มีลักษณะอย่างไร - person espensb; 29.04.2013
comment
สวัสดี รหัสมีลักษณะดังนี้ responsecheck = $VR,1,2,Txstationdata datafromport = $VR,1,12454.789,09,00,2,TxStationdata พอร์ตข้อมูลจะอัปเดตทุกครั้งที่ได้รับข้อมูลจากพอร์ตอนุกรม เช่น datafromport= $VR ,1,12457.890,09,00,rangepule,98,00 ดัชนีรายการจะเปลี่ยนแปลงตลอดเวลาสำหรับทุกอินพุตที่ได้รับ ดังนั้นตัวเลือกดัชนีจึงไม่ทำงานเช่นกัน - person user2323300; 29.04.2013
comment
ฉันพบข้อความค้นหาที่คล้ายกันใน การค้นหาค่าของรายการใน รายการ และตอนนี้ปัญหาของฉันได้รับการแก้ไขแล้ว ขอบคุณทุกท่านสำหรับคำตอบของคุณ - person user2323300; 29.04.2013