सूची बी के आधार पर सूची को सॉर्ट करने का मानक तरीका, उन्हें एक साथ ज़िप करना और क्रमबद्ध, जैसे उपयोग करना है
sorted(zip(b,a))
हालांकि, यदि बी में दो तत्व बराबर हैं, तो यह स्वचालित रूप से एक के अनुसार क्रमबद्ध करने की कोशिश करेगा, और कभी-कभी समस्याएं उत्पन्न होती हैं। उदाहरण के लिए विचार करें
import numpy as np
a=[np.array([4,5]),np.array([3,4])]
b=[1,1]
e=zip(b,a)
sorted(e)
यह त्रुटि का कारण बनता है
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
तो जब बी में दो तत्व बराबर होते हैं, तो ऐसा लगता है कि एक के अनुसार क्रमबद्ध करने के लिए आगे बढ़ना प्रतीत होता है, लेकिन चूंकि इसमें numpy arrays शामिल हैं, सॉर्टिंग एल्गोरिदम शिकायत करते हैं जब यह उनकी तुलना करने की कोशिश करता है।
वैसे भी, क्रमबद्ध इस अपेक्षित व्यवहार है? किसी भी मामले में, मैं बस बी के अनुसार क्रमबद्ध करना चाहता हूँ। यदि दो तत्व बराबर हैं, तो आदेश कोई फर्क नहीं पड़ता। एक सॉर्टिंग एल्गोरिदम लिखने के बिना इसे ठीक करने के तरीके पर कोई विचार?
उत्तर:
उत्तर № 1 के लिए 1त्रुटि दिखाती है क्योंकि numpy.array
नहीं है तुलनीय सॉर्टिंग की भावना में, यानी यह एक वापस नहीं करता है True
या False
मान (लेकिन एक अन्य बूलियन सरणी) दो सारणी की तुलना करते समय, जो अलग है सूची सूचीबद्ध करता है.
यदि आप केवल तदनुसार सॉर्ट करना चाहते हैं b
, एक महत्वपूर्ण कार्य प्रदान करते हैं sorted
:
sorted(e, key=lambda x: x[0])
# [(1, array([4, 5])), (1, array([3, 4]))]