2012-08-23 17 views
6

मेरे पास दो सूचियां हैं।दूसरी सूची में एक सूची का पहला उदाहरण ढूंढना

पहली सूची पहले ही क्रमबद्ध है (कुछ अन्य मानदंडों से) जैसे कि सूची में पहले, बेहतर।

sortedList = ['200', '050', '202', '203', '206', '205', '049', '047', '042', '041', '043', '044', '046', '045', '210', '211', '306', '302', '308', '309', '311', '310', '221', '220', '213', '212'] 

दूसरी सूची अनुमति प्राप्त मान की एक सूची है:

allowedList = ['001','002','003','004','005','006','007','008','009','010','203','204','205','206','207','212','213','215','216'] 

मैं उच्चतम अनुसार क्रमबद्ध मूल्य कि allowedList में मौजूद चयन करना चाहते हैं, और मैं केवल की मूर्खतापूर्ण तरीके के साथ आ रहा हूँ यह कर रहा हूं। इस तरह की चीजें:

import numpy as np 
temp = [] 
for x in allowedList: 
    temp.append(sortedList.index(x)) 
np.min(temp) 

इससे बेहतर तरीका होना चाहिए। कोई विचार?

उत्तर

2

तथ्य यह है कि पहले से ही allowedlist क्रमबद्ध किया जाता है का उपयोग कर समाधान शायद अधिक कुशल हैं (और एक set का उपयोग कर, वे निश्चित रूप से कर रहे हैं - रैखिक समय द्विघात बनाम), लेकिन पूर्णता के लिए ही, अपने मौजूदा समाधान एक बहुत और अस्थायी छोटा किया जा सकता सूची का सफाया:

min(allowedList, key=sortedList.index) 

यह पायथन के built-in min function का उपयोग करता है, बल्कि numpy से एक की तुलना में - np.min मुख्य रूप से केवल उपयोगी अगर तुम उन्हें NumPy सरणी के साथ प्रयोग कर रहे हैं है, सूचियों का उपयोग करते समय इसकी कोई आवश्यकता नहीं है।

3

यहाँ कैसे आप बिना numpy

>>> sorted_list = ['200', '050', '202', '203', '206', '205', '049', '047', '042', '041', '043', '044', '046', '045', '210', '211', '306', '302', '308', '309', '311', '310', '221', '220', '213', '212'] 
>>> allowed_list = ['001','002','003','004','005','006','007','008','009','010','203','204','205','206','207','212','213','215','216'] 
>>> allowed_set = set(allowed_list) 
>>> next((x for x in sorted_list if x in allowed_set), None) 
'203' 
0
allowedSet = set(allowedList) 
i, a = next(((i, a) for i, a in enumerate(sortedList) if a in allowedSet), (-1, None)) 

i ऐसा कर सकता है है इस तरह की पहली तत्व (3) का सूचकांक है, a उस तत्व ('203') है।

यदि किसी भी मामले में, दो सूचियों में कोई सामान्य तत्व नहीं है, i = -1 और a = None, जिसे आप स्वयं संशोधित कर सकते हैं।

संबंधित मुद्दे