मेरे पास घरों की एक सूची है:

list1 = [home1, home2, home3, home4]

और मेरे पास विशिष्ट घरों की एक और सूची है:

list2 = [ home6, home7, home8, home10]

हर घर में एक फ़ील्ड होता है date। मैं List2 को list1 में डालना चाहता हूं home.date

उदाहरण के लिए यदि home7.date < home1.date, तो home7 को home1 से पहले list1 में डाला जाएगा

मैंने लूप के लिए दो का उपयोग करने की कोशिश की लेकिन यह बहुत धीमा लगता है और सीपीयू द्वारा कई गणनाएं की जाती हैं

        for el in list1:
            for elt2 in list2:
                if el.date > elt2.date:
                    list1.insert((list1.index(el)),elt2)

PS : कुछ तिथियां निर्धारित नहीं हैं, इसलिए उनका एक None मान है और मैं list1 में संबंधित home की अनुक्रमणिका को बदलना नहीं चाहता

कोई विचार ?

2
pietà 4 अक्टूबर 2017, 14:50
आपका कोड वर्तमान में उस मामले को हैंडल नहीं करता जहां Home.date None होगा।
 – 
bruno desthuilliers
5 अक्टूबर 2017, 12:48

3 जवाब

पहली बात सबसे पहले: किसी सूची (या तानाशाही, सेट आदि) को संशोधित करते हुए इसे संशोधित करना आमतौर पर एक बहुत बुरा विचार है।

आपके मामले में, सबसे आसान समाधान शायद पहले दो सूचियों को मर्ज करना है, फिर key कॉलबैक का उपयोग करके सूची को क्रमबद्ध करें:

list1.extend(list2)
list1.sort(key=lambda x: x.date)
7
bruno desthuilliers 4 अक्टूबर 2017, 15:00
आपके त्वरित उत्तर के लिए धन्यवाद.. समस्या यह है कि कुछ x.date None हैं और मैं उनकी अनुक्रमणिका नहीं बदलना चाहता। मैं अपनी पोस्ट अपडेट करूंगा
 – 
pietà
4 अक्टूबर 2017, 15:32
यह एक बहुत अधिक जटिल समस्या है - और आपका एक वर्तमान कोड वास्तव में संभाल नहीं पाता है (आपको TypeError अपवाद date की तुलना None से करने का प्रयास करेंगे)।
 – 
bruno desthuilliers
5 अक्टूबर 2017, 12:46

संपादित:

list3 = (list1 + list2)
list3.sort(key = lambda x: x.date)
2
ShreyasG 4 अक्टूबर 2017, 15:10
छँटाई के लिए कुंजी प्रदान करने की आवश्यकता होगी
 – 
AK47
4 अक्टूबर 2017, 14:55
2
@ShreyasG, .sort() का उपयोग करके None वापस आ जाएगा क्योंकि यह जगह में होता है। यह sorted(list1+list2) होना चाहिए।
 – 
James
4 अक्टूबर 2017, 14:56
ठीक है, आप दोनों से सहमत हूँ। सिंटैक्स की जांच नहीं की और सॉर्ट करने के लिए कुंजी भूल गए।
 – 
ShreyasG
4 अक्टूबर 2017, 14:57
वास्तव में, मैं कुंजी के साथ .sort() का उपयोग करूंगा, लेकिन list2 के तत्वों को list1 में डालने के बाद। आखिरकार, ओपी सूची को संशोधित करना चाहता है, जिसे अन्य स्थानों पर संदर्भित किया जा सकता है।
 – 
tobias_k
4 अक्टूबर 2017, 14:58
1
Won't this do? का उपयोग केवल अलंकारिक प्रश्न के रूप में किया जाना चाहिए जब आप सुनिश्चित हों कि यह काम करता है। अन्यथा, यह एक टिप्पणी होनी चाहिए;)
 – 
Eric Duminil
4 अक्टूबर 2017, 14:58

एक नई सॉर्ट की गई सूची वापस करने के लिए, आपको सॉर्ट किए गए () अंतर्निहित फ़ंक्शन का उपयोग करना चाहिए:

sorted_list = sorted(list1 + list2, key=lambda x: x.date, reverse=True)
2
Edward Minnix 4 अक्टूबर 2017, 16:27
1
true पायथन में मौजूद नहीं है। इसके अलावा: आपको यहां reverse की आवश्यकता नहीं है।
 – 
Eric Duminil
4 अक्टूबर 2017, 14:55
1
@tobias_k: क्योंकि इसे stackoverflow.com/questions/403421/…
 – 
Eric Duminil
4 अक्टूबर 2017, 14:56
वास्तव में आपको रिवर्स की आवश्यकता नहीं है, हालांकि, मेरा इरादा ऑर्डर को उलटने की संभावना दिखाना है, @EricDuminil सच यह एक साधारण पेस्ट नहीं है, यह प्रश्न को समझने के लिए कौशल और गहरी समझ लेता है, अन्यथा, मैं एक्स को संशोधित नहीं करता ।दिनांक
 – 
rachid el kedmiri
4 अक्टूबर 2017, 14:58
आपके त्वरित उत्तर के लिए धन्यवाद.. समस्या यह है कि कुछ x.date कोई नहीं हैं और मैं उनकी अनुक्रमणिका नहीं बदलना चाहता। मैंने अपनी पोस्ट अपडेट की
 – 
pietà
4 अक्टूबर 2017, 15:42