मैं पायथन 3 का उपयोग कर रहा हूं और मुझे यह समस्या है:

ListA = [38,40,27,11,1,5,22,7,47,3,11]
ListB = [12,16,38,5,40,27,3]

मुझे यह गिनने की आवश्यकता है कि ListB से कोई संख्या कितनी बार ListA में दिखाई दी। इस मामले में, आउटपुट 3 होना चाहिए। क्योंकि ३८, ४० और २७ ऐसी संख्याएँ हैं जो ListB में हैं, और ListA में पहली 3 संख्याएँ हैं।

कोई मिलान न होने की स्थिति में (यदि ListA में पहला नंबर ListB में नहीं है), तो आउटपुट होना चाहिए: 0

-1
Vitali Kazinski 4 अक्टूबर 2018, 11:51

2 जवाब

कुशल सदस्यता लुकअप के लिए आप ListB को पहले सेट में बदल सकते हैं:

setB = set(ListB)
for count, a in enumerate(ListA):
    if a not in setB:
        break
else:
    count = len(ListA)

आपके नमूना इनपुट के साथ, count बन जाएगा: 3

0
blhsing 4 अक्टूबर 2018, 09:17

ऐसा करने का एक बहुत ही संक्षिप्त तरीका itertools.takewhileका उपयोग करना होगा। समारोह:

from itertools import takewhile

ListA = [38,40,27,11,1,5,22,7,47,3,11]
ListB = [12,16,38,5,40,27,3]

sum(1 for _ in takewhile(ListB.__contains__, ListA))
# 3

takewhile, ListA से आइटम तब तक लेंगे जब तक वे ListB (38,40,27) में हैं। और sum(1 for _ in <iterable>) उन्हें आसानी से गिनेंगे।

1
Georgy 18 पद 2019, 15:45