तो मेरे पास सूचियों की एक सूची है जिसे मुझे पार्स करने और सामग्री में हेरफेर करने की आवश्यकता है। उप-सूचियों में संख्याओं और शब्दों के तार हैं, और मैं संख्याओं को पूर्णांकों में बदलना चाहता हूं। मुझे नहीं लगता कि यह प्रासंगिक है, लेकिन मैं इसका उल्लेख केवल उस स्थिति में करूंगा जब: मेरा मूल डेटा एक CSV से आया था जिसे मैंने न्यूलाइन पर विभाजित किया, और फिर अल्पविराम पर विभाजित किया।

मेरा कोड कैसा दिखता है:

def prep_data(data):
    list = data.split('\n') #Splits data on newline
    list = list[1:-1] #Gets rid of header and last row, which is an empty string

    prepped = []
    for x in list:
        prepped.append(x.split(','))

    for item in prepped: #Converts the item into an int if it is able to be converted
        for x in item:
            try:
                item[x] = int(item[x])
            except:
                pass
    return prepped

मैंने प्रीपेड में प्रत्येक सबलिस्ट के माध्यम से लूप करने की कोशिश की और उनमें मानों के प्रकार को बदल दिया, लेकिन ऐसा नहीं लगता कि लूप कुछ भी करता है क्योंकि prep_data वही देता है जैसा कि मैंने लूप के लिए लागू करने से पहले किया था।

0
wryan17 29 फरवरी 2020, 00:08
1
उन वस्तुओं के साथ सूची में अनुक्रमित करने का प्रयास न करें जो इसमें हैं (जब तक कि आप वास्तव में ऐसा करने की कोशिश नहीं कर रहे हैं ...) जब आप किसी सूची पर लूप करते हैं, तो यह उसके आइटम सीधे पर लूप करता है, इंडेक्स पर नहीं। IOW item[x] = int(item[x]) काम नहीं करेगा। यह स्पष्ट हो गया होता यदि आपने सभी त्रुटियों को एक नंगे try: ... except: pass के साथ शांत करने के भयानक अभ्यास का उपयोग नहीं किया होता
 – 
juanpa.arrivillaga
29 फरवरी 2020, 00:39
@ juanpa.arrivillaga मैं एक शौकिया हूं जो सिर्फ कोड करना सीख रहा है, मुझे थोड़ा ढीला कर दो। ऐसा 'भयानक अभ्यास' क्यों कर रहा है?
 – 
wryan17
29 फरवरी 2020, 01:14
1
क्योंकि यह सभी त्रुटियों को छुपाता है, जिसमें वे त्रुटियां भी शामिल हैं जिन्हें जानना आपके लिए वास्तव में उपयोगी होता। आपको केवल उस विशिष्ट त्रुटि को ट्रैप करने की आवश्यकता है जो आपके इनपुट रूपांतरण के अमान्य होने पर फेंक दी जाती है; अन्य सभी त्रुटियों को "हमेशा की तरह" रिपोर्ट किया जाना चाहिए, ताकि आप प्रोग्राम को डिबग कर सकें यदि यह सही ढंग से काम नहीं कर रहा है।
 – 
Jongware
29 फरवरी 2020, 01:25
1
क्योंकि यह सभी त्रुटियों को शांत करता है, न कि केवल आपकी अपेक्षा के अनुसार। जब int(item[x]) विफल हो जाता है, तो आप ValueError की अपेक्षा कर रहे थे, लेकिन आपने एक TypeError को एक स्ट्रिंग के साथ गलत तरीके से सूची में अनुक्रमित करने का प्रयास करने से चुप करा दिया। आप enumerate(item) का उपयोग करना चाहते हैं ताकि आप सूचकांकों और वस्तुओं पर पुनरावृति कर सकें, ताकि आप for i, x in enumerate(item): item[i] = do_something(x) जैसा कुछ कर सकें
 – 
juanpa.arrivillaga
29 फरवरी 2020, 01:27

2 जवाब

मुझे लगता है कि मैं देख रहा हूं कि क्या गलत है, आप सोच रहे हैं कि पाइथन वास्तव में अपने असाइनमेंट के साथ अधिक उदार है।

def prep_data(data):
list = data.split('\n') #Splits data on newline
list = list[1:-1] #Gets rid of header and last row, which is an empty string

prepped = []
for x in list:
    prepped.append(x.split(','))

for i in prepped: #Converts the item into an int if it is able to be converted
item = prepped[i]
    for x in item:
        try:
            item[x] = int(item[x])
        except:
            pass
prepped[i] = item
return prepped

मैं इसे उस मशीन पर नहीं चला सकता जो मैं अभी चालू हूं, लेकिन ऐसा लगता है कि समस्या यह है कि "प्रीपेड" वास्तव में कोई नया असाइनमेंट प्राप्त नहीं कर रहा था, आप केवल उप सरणी "आइटम" में मान बदल रहे थे।

0
sntrenter 29 फरवरी 2020, 00:36
आपके उत्तर के लिए धन्यवाद, लेकिन इंडेंटेशन यहां और वहां बंद है। चूंकि यह पायथन में काफी महत्वपूर्ण है, आप अपनी पोस्ट को ठीक करना चाह सकते हैं।
 – 
Jongware
1 मार्च 2020, 01:09

मैं आपके कार्य के बारे में निश्चित नहीं हूँ, क्योंकि हो सकता है कि मैं आपके आय डेटा को समझ नहीं पाया, लेकिन आप निम्न की तरह कुछ कोशिश कर सकते हैं क्योंकि यदि आप केवल पास करते हैं, तो आप स्ट्रिंग या अजीब डेटा खो सकते हैं:

def parse_data(raw_data):
    data_lines = raw_data.split('\n') #Splits data on newline
    data_rows_without_header = data_lines[1:-1] #Gets rid of header and last row, which is an empty string

    parsed_date = []
    for raw_row in data_rows_without_header:
        splited_row = raw_line.split(',')
        parsed_row = []
        for value in splited_row:
            try:
                parsed_row.append(int(value)
            except:
                print("The value '{}' is not castable".format(value))
                parsed_row.append(value) # if cast fails, add the string as it is
        parsed_date.append(parsed_row)
    return parsed_date
0
Michael Camilo 29 फरवरी 2020, 00:44