2010-08-26 21 views
7

में तैरता के लिए मैं अंशों की एक सूची है, जैसे कि:Convert सूची अजगर

data = ['24/221 ', '25/221 ', '24/221 ', '25/221 ', '25/221 ', '30/221 ', '31/221 ', '31/221 ', '31/221 ', '31/221 ', '30/221 ', '30/221 ', '33/221 '] 

मैं तैरता करने के लिए इन परिवर्तित करने के बारे में कैसे जाना है, उदा हैं

data = ['0.10 ', '0.11 ', '0.10 ', '0.11 ', '0.13 ', '0.14 ', '0.14 ', '0.14 ', '0.14 ', '0.14 ', '0.13 ', '0.13 ', '0.15 '] 

Fraction मॉड्यूल लगता है केवल Fractions (नहीं) और float([x]) कन्वर्ट करने के लिए एक स्ट्रिंग या पूर्णांक की आवश्यकता है।

+0

आप TRUNC करना चाहते हैं दूसरे दशमलव के बाद खाया या गोल? –

उत्तर

11
import fractions 
data = [float(fractions.Fraction(x)) for x in data] 

या वास्तव में अपने उदाहरण से मिलान करने के (डेटा तार के साथ समाप्त होता है):

import fractions 
data = [str(float(fractions.Fraction(x))) for x in data] 
0
def split_divide(elem): 
    (a,b) = [float(i) for i in elem.split('/')] 
    return a/b 

map(split_divide, ['1/2','2/3']) 

[0.5, .66666666666666663]

1
import fractions 
data = [str(round(float(fractions.Fraction(x)), 2)) for x in data] 
0
data = [ x.split('/') for x in data ] 
data = [ float(x[0])/float(x[1]) for x in data ] 
0

नेस्टेड सूची comprehensions होगा अतिरिक्त मॉड्यूल आयात किए बिना आपको अपना उत्तर प्राप्त करें (अंश है केवल पायथन 2.6+ में)।

>>> ['%.2f' % (float(numerator)/float(denomator)) for numerator, denomator in [element.split('/') for element in data]] 
['0.11', '0.11', '0.11', '0.11', '0.11', '0.14', '0.14', '0.14', '0.14', '0.14', '0.14', '0.14', '0.15'] 
+1

फ्रैक्शंस 2.6 में है। – carl

+0

ओह! आप सही हे। मेरी गलती। –

1

अंश मॉड्यूल का उपयोग करना अच्छा और साफ है, लेकिन (धीमा) काफी हैवीवेट है सरल स्ट्रिंग विभाजन या विभाजन

इस सूची में समझ तैरता सबसे ज्यादा वोटों के साथ जवाब के रूप में

करता है बनाता है की तुलना में
[(n/d) for n,d in (map(float, i.split("/")) for i in data)] 

आप दो दशमलव स्थान तार चाहते हैं

["%.2f"%(n/d) for n,d in (map(float, i.split("/")) for i in data)] 
संबंधित मुद्दे