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.


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.


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


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.


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

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


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

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

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

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)

0

Eu resolvi esse problema no meu programa usando:

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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.