পাইথনে, আমি কীভাবে তালিকার সমস্ত আইটেমকে ফ্লোটে রূপান্তর করব?


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)

তবে এটি আমার পক্ষে কাজ করে না বলে মনে হয়।


60
পরিবর্তনশীল নাম হিসাবে তালিকাটি ব্যবহার করবেন না।
টিম পিটজ্যাকার

4
উপরের মন্তব্যটি বিশদভাবে listজানাতে: ভেরিয়েবলের নাম ব্যবহার করে বিল্ট-ইন listকন্সট্রাক্টরকে ছায়া দেওয়া হবে যাতে আপনাকে একই সুযোগে ব্যবহার করতে দেয় না
ল্যাসে হালবার্গ হারবায়ে

উত্তর:


452
[float(i) for i in lst]

নির্ভুল হতে, এটি ভাসমান মান সহ একটি নতুন তালিকা তৈরি করে। mapপদ্ধতির বিপরীতে এটি পাই 3 কেতে কাজ করবে।


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]
উদা

126

map(float, mylist) এটা করা উচিত।

(পাইথন 3-এ, মানচিত্র কোনও তালিকার অবজেক্ট ফিরিয়ে দেওয়া বন্ধ করে দিয়েছে, সুতরাং আপনি যদি নতুন তালিকা চান এবং কেবল পুনরাবৃত্তি করার জন্য কিছু না চান তবে আপনার প্রয়োজন হয় list(map(float, mylist)- অথবা সাইলেন্টগোস্টের উত্তরটি ব্যবহার করুন যা তাত্ক্ষণিকভাবে বেশি পাইথোনিক।)


এটি আসলে পাইথন 3 এ একটি নকশা উপ-
অনুকূলতা ity

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)

বিটিডাব্লু, listআপনার ভেরিয়েবলগুলির জন্য ব্যবহার এড়িয়ে চলুন , কারণ এটি একই নামের সাথে অন্তর্নির্মিত ফাংশনটির মুখোশ দেয়।


দুঃখিত, আমি এখানে জায়গার অর্থ কী পাইনি। এটি পূর্বের পাইথোনিক উত্তর থেকে কীভাবে আলাদা হয়। পূর্ববর্তী উত্তরে রূপান্তর না "[ভাসা (আমি) আমার জন্য]]" মূল তালিকা সূচকটি ধরে রাখে
এএআই

1
@ এএএআই মূল তালিকা পরিবর্তন করুন বনাম একটি নতুন তৈরি করুন।
ডেনিস ওটকিডাচ

13

এটি অন্য পদ্ধতি হবে (কোনও লুপ ব্যবহার না করে!):

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

যদি আপনি এটিকে এনপি.আর = হিসাবে রাখতে চান তবে আবার তালিকাতে এনপি.আরে কাস্ট করার দরকার নেই
আলওয়াস

8

এমনকি আপনি নাম্বার দ্বারা এটি করতে পারেন

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

এই ফ্লোট হিসাবে আপনার তালিকার এনপি অ্যারে

আপনি ইন্টি হিসাবে 'টাইপ' সেট করতে পারেন


1
তবে তারপরে আপনি একটি তালিকা নয়, একটি অদ্ভুত অ্যারে ফিরিয়ে দিচ্ছেন।
ব্যবহারকারী 650261

3

আপনি তালিকাটি সরাসরি একটি ভাসমান অ্যারে বা ম্যাট্রিক্সে রূপান্তর করতে ন্যাম্পি ব্যবহার করতে পারেন।

    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
ওপিতে বলা হয়েছে যে তিনি একটি পাঠ্য ফাইল থেকে পড়ছেন। এই উত্তরটি যা চাওয়া হয়েছে তাতে প্রযোজ্য না।
ইলহিকাস

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.