No Python, como faço para converter todos os itens de uma lista em carros alegóricos?

246

Eu tenho um script que lê um arquivo de texto, extrai números decimais como seqüências de caracteres e os coloca em uma lista.

Então, eu tenho esta lista:

['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']

Como converter cada um dos valores na lista de uma seqüência de caracteres para um flutuador?

Eu tentei:

for item in list:
    float(item)

Mas isso não parece funcionar para mim.

Patrick Artner
fonte
60
Não use list como um nome de variável.
Tim Pietzcker 23/10/09
4
Para elaborar o comentário acima: usar listcomo nome de variável sombreará o listconstrutor
interno

Respostas:

452
[float(i) for i in lst]

para ser mais preciso, ele cria uma nova lista com valores flutuantes. Diferente da mapabordagem, ele funcionará em py3k.

SilentGhost
fonte
7
Para grandes da matriz, eu recomendo usar numpy: np.array(inp_list, dtype=np.float32). Você nem precisa especificar se é um flutuador e apenas usar:np.array(inp_list)
Thomas Devoogdt 23/05
2
@Thomas Devoogdt: Eu acho que você precisa especificar o tipo, caso contrário você terá uma matriz numpy de cordas
seb007
2
Por favor, note que você deve atribuir [float(i) for i in lst]a algo. Exemplo:new_list = [float(i) for i in lst]
FaizFizy 24/10/19
126

map(float, mylist) deve fazê-lo.

(No Python 3, o map cessa de retornar um objeto de lista, portanto, se você deseja uma nova lista e não apenas algo para iterar, você precisa list(map(float, mylist)- ou use a resposta do SilentGhost, que é indiscutivelmente mais pitônica.)

Tim Pietzcker
fonte
Este é na verdade um sub-otimização de design em Python 3.
xuancong84
15

float(item)faça a coisa certa: converte seu argumento para flutuar e retorná-lo, mas não altera o argumento no local. Uma correção simples para o seu código é:

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

O mesmo código pode ser escrito mais curto usando a compreensão da lista: new_list = [float(i) for i in list]

Para alterar a lista no local:

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

BTW, evite usar listpara suas variáveis, pois mascara a função interna com o mesmo nome.

Denis Otkidach
fonte
Desculpe, eu não entendi o que significa local aqui. Como isso difere da resposta pitônica anterior. A conversão na resposta anterior "[float (i) para i no lst]" não mantém o índice da lista original
AAI
1
@AAI Altere a lista original vs. crie uma nova.
Denis Otkidach
13

Este seria o outro método (sem usar nenhum loop!):

import numpy as np
list(np.float_(list_name))
Amin Kiany
fonte
Não é necessário lançar o np.array na lista novamente se você gostaria de mantê-lo como um np.array =)
alvas
8

você pode até fazer isso entorpecido

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

esse array np de retorno da sua lista como float

você também pode definir 'dtype' como int

Alireza
fonte
1
Mas então você está retornando uma matriz numpy, não uma lista.
user650261
3

Você pode usar numpy para converter uma lista diretamente em uma matriz ou matriz flutuante.

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

Se você deseja converter a matriz inteira em uma matriz flutuante, adicione 0. a ela

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

É assim que eu faria.

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'>
SammyRod
fonte
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'>

que exibe o tipo como uma lista de cadeias. Você pode converter esta lista em uma matriz de flutuadores simultaneamente usando numpy:

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

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

Eu tive que extrair números primeiro de uma lista de strings flutuantes:

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

então cada um converte em um flutuador:

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

no final, atribua todos os carros alegóricos a um quadro de dados como float64:

   df4['fscore'] = np.array(ad,dtype=float)
Max Kleiner
fonte
0

Eu resolvi esse problema no meu programa usando:

number_input = float("{:.1f}".format(float(input())))
list.append(number_input)
Gui
fonte
1
O OP afirma que ele está lendo um arquivo de texto. esta resposta não se aplica ao que foi solicitado.
Ilhicas 04/04/19
0
for i in range(len(list)): list[i]=float(list[i])
user11545988
fonte