मेरा प्रश्न दो भागों में विभाजित है।
सबसे पहले मुझे इस तरह की एक सूची को सॉर्ट करने की आवश्यकता है: a = ['Zone 3', 'Zone', 'Zone 9', 'Zone 10', 'Zone 5']
जोन की संख्या से
परिणाम इस तरह दिखना चाहिए: result = ['Zone', 'Zone 3', 'Zone 5', 'Zone 9', 'Zone 10']
मैंने इसे निम्नलिखित कोड के साथ आजमाया है:
import numpy as np
a = ['Zone 3', 'Zone', 'Zone 9', 'Zone 10', 'Zone 5']
b = np.empty((0,2))
for i in range(0, len(a)):
if len(a[i]) > 4:
a1 = a[i].split()
a1 = np.array([[a1[0],int(a1[1])]])
if len(a[i]) == 4:
a1 = np.array([[a[i], '']])
print(a2)
b = np.append(b, a1, axis=0)
b = b[b[:,1].argsort()]
print(b)
नतीजे के साथ:
[['Zone' '']
['Zone' '10']
['Zone' '3']
['Zone' '5']
['Zone' '9']]
समस्या यह प्रतीत होती है, कि argsort() 10 को 10 के रूप में नहीं बल्कि 1 के रूप में पहचानता है।
फॉलिंग कोड में दूसरी समस्या उत्पन्न हुई:
seperator = ' '
b = list()
for i in range(len(a)):
c = seperator.join(b[i])
print(c)
b = np.append(b, c)
print(b)
त्रुटि अपवाद हुआ: IndexError सूची अनुक्रमणिका सीमा से बाहर प्रकट होती है, लेकिन अनुक्रमणिका सीमा में होनी चाहिए।
मुझे आशा है कि आप इन समस्याओं में मेरी मदद कर सकते हैं।
3 जवाब
मैं पायथन की अंतर्निर्मित छँटाई कार्यक्षमता का उपयोग करूँगा। आप key
पैरामीटर का उपयोग यह अनुकूलित करने के लिए कर सकते हैं कि आपकी सूची वास्तव में कैसे क्रमबद्ध है।
उदाहरण के लिए:
a = ['Zone 3', 'Zone', 'Zone 9', 'Zone 10', 'Zone 5']
def zone_key(l):
try:
_, v = l.split(' ')
return int(v)
except ValueError:
return 0
print(sorted(a, key=zone_key))
आपकी दूसरी समस्या के लिए: आप सूची में ith
तत्व तक पहुंचने का प्रयास कर रहे हैं b
(b[i]
) लेकिन आपने b को एक खाली सूची के रूप में परिभाषित किया है (b = list()
) आपके लूप के पहले पुनरावृत्ति पर i = 0
तो यह सूची b
में तत्व 0 को आजमाने और एक्सेस करने जा रहा है जो अस्तित्व में नहीं है और इसलिए इंडेक्स त्रुटि का कारण बनता है।
तो यह आसान है
# Will hold the processed values
my_list = list()
# For every tuple in the list
for tup in a:
# Split on space
values = tup.split()
# See if the length is less than two
if len(values) < 2:
# Add a 0 if there is nothing
my_list.append((values[0], 0))
else:
# Otherwise save as it is in a tuple
my_list.append((values[0], int(values[1])))
# Then simply
my_list.sort(key= lambda x: x[1])
यह सुचारू रूप से काम करेगा।
@hurlenko के अनुसार natsort चेक करें:
from natsort import natsorted
natsorted(a, key=lambda y: y.lower())
तार की एक सूची देता है:
['Zone', 'Zone 3', 'Zone 5', 'Zone 9', 'Zone 10']
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।