मैं डेटा के एक सेट को 2 अलग-अलग सूचियों, पूर्णकालिक और अंशकालिक में सॉर्ट करने का प्रयास कर रहा हूं। लेकिन यह काम नहीं कर रहा प्रतीत होता है। क्या कोई इंगित कर सकता है कि मुझे यह गलत कहां मिल रहा है?

data = [(['Andrew'], ['FullTime'], [38]), 
       (['Fred'], ['PartTime'], [24]), 
       (['Chris'], ['FullTime'], [38])]

def sort(var1, datadump):
    positionlist = []
    for b in range(0, len(datadump)):
        temp2 = datadump[b][1]
        if (temp2 == var1):
            positionlist.append(datadump[b])
    return (positionlist)

FullTimeList = sort("FullTime", data) 
PartTimeList = sort("PartTime", data)

print(FullTimeList) 
print(PartTimeList)
3
champinoman 23 जिंदा 2020, 15:05

3 जवाब

सबसे बढ़िया उत्तर

इसे बदलकर हल किया जाता है

if (temp2 == var1):

प्रति

if (temp2[0] == var1):

ऐसा इसलिए है क्योंकि प्रत्येक टपल के भीतर के तत्व एक स्ट्रिंग रखने वाली सूचियाँ हैं, न कि स्वयं स्ट्रिंग्स।

दो सूची समझ का उपयोग करके इस समस्या को भी हल किया जा सकता है:

FullTimeList = [x for x in data if x[1][0] == 'FullTime']
PartTimeList = [x for x in data if x[1][0] == 'PartTime']
4
CDJB 23 जिंदा 2020, 15:10

यदि आप अपने चरों और कार्यों को वर्णनात्मक नामों से नामित करते हैं तो आपको बेहतर समझ प्राप्त होगी:

data = [(['Andrew'], ['FullTime'], [38]), 
        (['Fred'], ['PartTime'], [24]), 
        (['Chris'], ['FullTime'], [38])]

def filter_records(value, records):
    result = []

    for i in range(len(records)):  # i and j are usual variable names for indices (b is not)
        record = records[i]
        name, work, hours = record   # give names to the parts 
        if work[0] == value:         # work[0] since the values are lists (no need for parenthesis)
            result.append(record)
    return result                    # no need for parenthesis

FullTimeList = filter_records("FullTime", data) 
PartTimeList = filter_records("PartTime", data)

नमूना:

for i in range(len(records)):
    record = records[i]

पायथन में एक विरोधी पैटर्न है - जिसका अर्थ है कि इसे लिखने का एक बेहतर तरीका है:

for record in records:
    ...
1
thebjorn 23 जिंदा 2020, 15:22

कोई जवाब नहीं: सिर्फ एक सुझाव। पायथन डीबगर का उपयोग करना सीखें।

python -m pdb <pythonscript.py>

इस मामले में, लाइन 9 . पर एक ब्रेकपॉइंट सेट करें

b 9

प्रोग्राम चलाएं

c

जब यह टूट जाए, तो temp2 देखें

p temp2

यह आपको बताता है

['FullTime']

Var1 . को देखो

p var1

यह आपको बताता है

'FullTime'

और आपकी समस्या है।

3
cup 23 जिंदा 2020, 15:15