पायथन में, मैं सूची में सभी वस्तुओं को फ़्लोट में कैसे परिवर्तित करूं?


246

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

इसलिए मेरे पास यह सूची है:

['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', '0.54',  '0.54', 
 '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54']

मैं सूची के प्रत्येक मान को स्ट्रिंग से फ़्लोट में कैसे परिवर्तित करूं?

मैंने कोशिश की है:

for item in list:
    float(item)

लेकिन यह मेरे लिए काम नहीं करता है।


61
एक चर नाम के रूप में सूची का उपयोग न करें।
टिम पित्ज़कर

4
उपरोक्त टिप्पणी पर विस्तार से बताने के लिए: listएक चर नाम के रूप में निर्मित बिल्ट-इन listकंस्ट्रक्टर को छाया देगा, इस प्रकार आप इसे उसी दायरे में उपयोग करने की अनुमति नहीं देंगे
Lasse Halberg Haarbye

जवाबों:


452
[float(i) for i in lst]

सटीक होने के लिए, यह फ्लोट वैल्यू के साथ एक नई सूची बनाता है। mapदृष्टिकोण के विपरीत यह py3k में काम करेगा।


7
बड़े सरणी के लिए, मैं numpy का उपयोग करने की सलाह दूंगा np.array(inp_list, dtype=np.float32):। आपको यह निर्दिष्ट करने की भी आवश्यकता नहीं है कि यह एक फ्लोट है और बस उपयोग करें:np.array(inp_list)
थॉमस डेवोग्ड

2
@ थोमस देववोग्ट: मुझे लगता है कि आपको टाइप निर्दिष्ट करने की आवश्यकता है, अन्यथा आपको स्ट्रिंग्स का एक सुव्यवस्थित सरणी मिल जाएगा
seb007

2
कृपया ध्यान दें कि आपको [float(i) for i in lst]कुछ काम करना है। जैसे:new_list = [float(i) for i in lst]
FaizFizy

126

map(float, mylist) करना चाहिए।

(पायथन 3 में, नक्शा एक सूची ऑब्जेक्ट को वापस करने के लिए बंद हो जाता है, इसलिए यदि आप एक नई सूची चाहते हैं और न कि केवल कुछ को खत्म करने के लिए, आपको या तो ज़रूरत है list(map(float, mylist)- या साइलेंटगॉस्ट के उत्तर का उपयोग करें जो यकीनन अधिक पायथोनिक है।)


यह वास्तव में पायथन 3 में एक डिजाइन उप-
इष्टतमता है

15

float(item)सही काम करें: यह अपने तर्क को तैरने और इसे वापस करने के लिए परिवर्तित करता है, लेकिन यह तर्क को जगह में नहीं बदलता है। आपके कोड के लिए एक सरल निर्धारण है:

new_list = []
for item in list:
    new_list.append(float(item))

समान कोड सूची समझ का उपयोग करके कम लिखा जा सकता है: new_list = [float(i) for i in list]

सूची में जगह बदलने के लिए:

for index, item in enumerate(list):
    list[index] = float(item)

BTW, listअपने चर के लिए उपयोग करने से बचें , क्योंकि यह एक ही नाम के साथ अंतर्निहित फ़ंक्शन को जोड़ता है।


क्षमा करें, मुझे यह नहीं मिला कि यहाँ क्या मतलब है। यह पिछले पाइथोनिक जवाब से कैसे अलग है। पिछले उत्तर में रूपांतरण नहीं है "[फ्लोट (i) i में lst के लिए]" मूल सूची सूचकांक को बनाए रखें
AAI

1
@AAI मूल सूची बदलें बनाम एक नया बनाएं।
डेनिस ओटकिडेक

13

यह एक अन्य विधि होगी (बिना किसी लूप का उपयोग किए!):

import numpy as np
list(np.float_(list_name))

यदि आप इसे np.array =) के रूप में रखना चाहते हैं तो np.array को दोबारा सूची में डालने की आवश्यकता नहीं है
alvas

8

आप इसे सुन्न करके भी कर सकते हैं

import numpy as np
np.array(your_list,dtype=float)

फ्लोट के रूप में आपकी सूची का यह एनपी सरणी

तुम भी int के रूप में 'dtype' सेट कर सकते हैं


1
लेकिन तब आप एक सूची नहीं बल्कि एक सुव्यवस्थित सरणी लौटा रहे हैं।
user650261

3

आप किसी सूची को फ़्लोटिंग सरणी या मैट्रिक्स में सीधे परिवर्तित करने के लिए numpy का उपयोग कर सकते हैं।

    import numpy as np
    list_ex = [1, 0] # This a list
    list_int = np.array(list_ex) # This is a numpy integer array

यदि आप पूर्णांक सरणी को फ्लोटिंग सरणी में बदलना चाहते हैं, तो इसमें 0. जोड़ें

    list_float = np.array(list_ex) + 0. # This is a numpy floating array

1

यह है कि मैं यह कैसे करेंगे।

my_list = ['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', 
    '0.54', '0.54', '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', 
    '0.55', '0.55', '0.54']
print type(my_list[0]) # prints <type 'str'>
my_list = [float(i) for i in my_list]
print type(my_list[0]) # prints <type 'float'>

0
import numpy as np
my_list = ['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', '0.54', '0.54', '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', 
'0.55', '0.55', '0.54']
print(type(my_list), type(my_list[0]))   
# <class 'list'> <class 'str'>

जो स्ट्रिंग की सूची के रूप में प्रकार प्रदर्शित करता है। आप इस सूची को एक साथ एक खांचे का उपयोग करके झांकियों की एक सरणी में बदल सकते हैं:

    my_list = np.array(my_list).astype(np.float)

    print(type(my_list), type(my_list[0]))  
    # <class 'numpy.ndarray'> <class 'numpy.float64'>

0

मुझे फ्लोट स्ट्रिंग्स की सूची से पहले नंबर निकालने थे:

   df4['sscore'] = df4['simscore'].str.findall('\d+\.\d+')

फिर प्रत्येक एक फ्लोट में परिवर्तित होता है:

   ad=[]
   for z in range(len(df4)):
      ad.append([float(i) for i in df4['sscore'][z]])

अंत में सभी फ़्लोट64 के रूप में एक डेटाफ़्रेम को फ़्लोट करें:

   df4['fscore'] = np.array(ad,dtype=float)

0

मैंने अपने कार्यक्रम में इस समस्या को हल किया है:

number_input = float("{:.1f}".format(float(input())))
list.append(number_input)

1
ओपी बताता है कि वह एक पाठ फ़ाइल से पढ़ रहा है। यह उत्तर उस पर लागू नहीं होता है जो पूछा गया है।
इलियास

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.