नेस्टेड सूचियां और फ्लोट में कनवर्ट करना

मैं एक पाठ फ़ाइल से कुछ संख्याओं को पढ़ने की कोशिश कर रहा हूं और उन्हें फ्लोट की सूची में बदल सकता हूं, लेकिन कुछ भी नहीं जो मैं कोशिश करता हूं वह सही काम करता है।

मेरा कोड अभी यहां है:

python_data = open('C:\Documents and Settings\redacted\Desktop\python_lengths.txt','r')
python_lengths = []
for line in python_data:
    python_lengths.append(line.split())
python_lengths.sort()

print python_lengths

यह लौटाता है:

[['12.2'], ['26'], ['34.2'], ['5.0'], ['62'], ['62'], ['62.6']]

(सभी ब्रैकेट शामिल हैं)

लेकिन मैं इसे किसी भी नियमित आदेश के साथ फ्लोट की सूची में परिवर्तित नहीं कर सकता:

python_lengths = float(python_lengths)

या:

float_lengths = [map(float, x) for x in python_lengths]

क्योंकि यह घोंसला या कुछ लगता है?

0
जोड़ा संपादित
विचारों: 1

3 उत्तर

def floats_from_file(f):
    for line in f:
        for word in line.split():
            yield float(word)

with open('C:/Documents and Settings/redacted/Desktop/python_lengths.txt') as f:
    python_lengths = list(floats_from_file(f))

python_lengths.sort()

print python_lengths

ध्यान दें कि आप विंडोज़ पर भी आगे की स्लैश का उपयोग कर सकते हैं। यदि आप बैकस्लाश का उपयोग करना चाहते हैं तो आपको समस्याओं से बचने के लिए "कच्ची" स्ट्रिंग का उपयोग करना चाहिए। किस तरह की समस्याएं? खैर, कुछ पात्र बैकस्लैश के साथ विशेष हैं; उदाहरण के लिए, \ n एक नई रेखा का प्रतिनिधित्व करता है। यदि आप केवल सादे उद्धरणों में पथ डालते हैं, और निर्देशिका नामों में से एक n से शुरू होता है, तो आपको वहां एक नई लाइन मिल जाएगी। समाधान बैकस्लाश को दोगुना करना, कच्चे तारों का उपयोग करना, या केवल आगे स्लेश का उपयोग करना है।

0
जोड़ा

@ eumiro का जवाब सही है, लेकिन यहां कुछ और है जो मदद कर सकता है:

numbers = []
with open('C:\Documents and Settings\redacted\Desktop\python_lengths.txt','r') as f:
   for line in f.readlines():
      numbers.extend(line.split())

numbers.sort()
print numbers
0
जोड़ा

ऐसा इसलिए हो रहा है क्योंकि .split() हमेशा आइटम की एक सूची देता है भले ही केवल 1 तत्व मौजूद था। यदि आप अपना python_lengths.append (line.split ()) python_lengths.extend (line.split ()) में बदलते हैं तो आपको अपनी समतल सूची मिल जाएगी।

0
जोड़ा
/ धागा। बहुत बहुत धन्यवाद, आपको कोई जानकारी नहीं है !! यह एक शब्द मुझे पिछले 4 घंटों के लिए इस कार्यक्रम को खत्म करने से रोक रहा है -_-
जोड़ा लेखक user1367212, स्रोत