파이썬에서 목록의 모든 항목을 부동으로 변환하는 방법은 무엇입니까?


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
변수 이름으로 list를 사용하지 마십시오.
Tim Pietzcker

4
위의 주석을 자세히 설명하려면 다음 list과 같이하십시오. 변수 이름으로 사용 하면 내장 list생성자 가 섀도 잉 되므로 동일한 범위에서이를 사용할 수 없습니다.
Lasse Halberg Haarbye

답변:


452
[float(i) for i in lst]

정확히 말하자면 float 값으로 새 목록을 만듭니다. map접근 방식 과 달리 py3k에서 작동합니다.


7
큰 배열의 경우 numpy : 사용하는 것이 좋습니다 np.array(inp_list, dtype=np.float32). 플로트인지 지정하지 않아도 다음을 사용할 수 있습니다.np.array(inp_list)
Thomas Devoogdt

2
@Thomas Devoogdt : 유형을 지정해야한다고 생각합니다. 그렇지 않으면 문자열 배열을 얻을 수 있습니다.
seb007

2
[float(i) for i in lst]무언가 를 할당 해야합니다. 예 :new_list = [float(i) for i in lst]
FaizFizy

126

map(float, mylist) 해야합니다.

(파이썬 3에서 map은리스트 객체를 반환하는 것을 list(map(float, mylist)멈추므로 반복 할 무언가가 아니라 새로운리스트를 원한다면 더 많은 피닉스적인 SilentGhost의 대답이 필요합니다 .)


이것은 실제로 파이썬 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같은 이름의 내장 함수를 가장하기 때문에 변수에 사용하지 마십시오 .


죄송합니다. 현재 위치에 의미가 없습니다. 이전의 pythonic 답변과 어떻게 다릅니 까? 이전 답변 "[float (i) for i lst]]"의 변환이 원래 목록 인덱스를 유지하지 않습니다
AAI

1
@AAI 원본 목록 변경 및 새 목록 만들기
Denis Otkidach

13

이것은 루프를 사용하지 않고 다른 방법입니다!

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

np.array =)로 유지하려면 np.array를 목록에 다시 캐스트 할 필요가 없습니다.
alvas

8

당신은 심지어 numpy로 이것을 할 수 있습니다

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

이 목록의 np 배열을 float로 반환합니다.

'dtype'을 int로 설정할 수도 있습니다


1
그러나 목록이 아닌 numpy 배열을 반환합니다.
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'>

유형을 문자열 목록으로 표시합니다. numpy를 사용하여이 목록을 동시에 float 배열로 변환 할 수 있습니다.

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

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

0

float 문자열 목록에서 먼저 숫자를 추출해야했습니다.

   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]])

결국 모든 float를 데이터 프레임에 float64로 할당하십시오.

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

0

내 프로그램에서 다음을 사용 하여이 문제를 해결했습니다.

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

1
OP는 텍스트 파일을 읽고 있다고 말합니다. 이 답변은 요청한 내용에는 적용되지 않습니다.
일히 카스

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.