मेरा प्रश्न दो भागों में विभाजित है।

सबसे पहले मुझे इस तरह की एक सूची को सॉर्ट करने की आवश्यकता है: 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 सूची अनुक्रमणिका सीमा से बाहर प्रकट होती है, लेकिन अनुक्रमणिका सीमा में होनी चाहिए।

मुझे आशा है कि आप इन समस्याओं में मेरी मदद कर सकते हैं।

-1
GuenterF. 4 मार्च 2020, 14:30
2
 – 
hurlenko
4 मार्च 2020, 14:36

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 को आजमाने और एक्सेस करने जा रहा है जो अस्तित्व में नहीं है और इसलिए इंडेक्स त्रुटि का कारण बनता है।

1
jontypreston 4 मार्च 2020, 14:40

तो यह आसान है

# 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])

यह सुचारू रूप से काम करेगा।

0
Ibtihaj Tahir 4 मार्च 2020, 14:48

@hurlenko के अनुसार natsort चेक करें:

from natsort import natsorted
natsorted(a, key=lambda y: y.lower())

तार की एक सूची देता है:

['Zone', 'Zone 3', 'Zone 5', 'Zone 9', 'Zone 10']
0
GLarose 4 मार्च 2020, 15:15