Junte-se a uma lista de itens com tipos diferentes como string no Python

292

Eu preciso entrar em uma lista de itens. Muitos dos itens da lista são valores inteiros retornados de uma função; ou seja,

myList.append(munfunc()) 

Como devo converter o resultado retornado em uma string para associá-lo à lista?

Preciso fazer o seguinte para cada valor inteiro:

myList.append(str(myfunc()))

Existe uma maneira mais pitônica de resolver problemas de fundição?

AKM
fonte
3
Certifique-se de usar boa gramática para que as pessoas possam entender o que você está perguntando e / ou reler sua pergunta antes de postar.
Allyourcode 28/08/10

Respostas:

536

Chamar str(...)é a maneira pitônica de converter algo em uma string.

Você pode considerar por que deseja uma lista de cadeias. Em vez disso, você pode mantê-lo como uma lista de números inteiros e apenas convertê-los em seqüências de caracteres quando precisar exibi-los. Por exemplo, se você tiver uma lista de números inteiros, poderá convertê-los um por um em um loop for e juntá-los a ,:

print(','.join(str(x) for x in list_of_ints))
Mark Byers
fonte
175

Não há nada errado em passar números inteiros para str. Uma razão para você não fazer isso é que myList é realmente uma lista de números inteiros, por exemplo, seria razoável somar os valores na lista. Nesse caso, não passe suas entradas para str antes de anexá-las à myList. Se você não converter em cadeias antes de anexá-las, poderá construir uma cadeia grande fazendo algo como

', '.join(map(str, myList))
allyourcode
fonte
36
Presumivelmente, o inglês não é sua língua nativa. Você não tem certeza sobre o desejo dele de participar de uma lista de itens para os quais ele está convertendo str? Por favor, considere a possibilidade de que você precisa adicionar alguma lógica fuzzy para o seu analisador ;-)
John Machin
3
@ John, eu considerei isso, mas se ele é bom em inglês, eu queria pressioná-lo gentilmente para elevar o nível de inglês no SO ao seu nível normal. Eu acho que a minha resposta é que entreter várias interpretações e situações que podem estar no.
allyourcode
41

função de mapa em python pode ser usada. São necessários dois argumentos. O primeiro argumento é a função que deve ser usada para cada elemento da lista. O segundo argumento é o iterável .

a = [1, 2, 3]   
map(str, a)  
['1', '2', '3']

Depois de converter a lista em string, você pode usar função de junção para combinar a lista em uma única string

a = map(str, a)    
''.join(a)      
'123'
Prakash N
fonte
10
a=[1,2,3]
b=[str(x) for x in a]
print b

O método acima é a maneira mais fácil e geral de converter lista em string. outro método curto é

a=[1,2,3]
b=map(str,a)
print b
Prateek Verma
fonte
4

Existem três maneiras de fazer isso.

digamos que você tenha uma lista de ints

my_list = [100,200,300]
  1. "-".join(str(n) for n in my_list)
  2. "-".join([str(n) for n in my_list])
  3. "-".join(map(str, my_list))

No entanto, conforme declarado no exemplo de timeit no site python em https://docs.python.org/2/library/timeit.html, o uso de um mapa é mais rápido. Então, eu recomendo que você use"-".join(map(str, my_list))

Thomas Turner
fonte
2

Seu problema é bastante claro. Talvez você esteja procurando estender, para adicionar todos os elementos de outra lista a uma lista existente:

>>> x = [1,2]
>>> x.extend([3,4,5])
>>> x
[1, 2, 3, 4, 5]

Se você deseja converter números inteiros em strings, use str () ou interpolação de strings, possivelmente combinada com uma compreensão de lista, ou seja,

>>> x = ['1', '2']
>>> x.extend([str(i) for i in range(3, 6)])
>>> x
['1', '2', '3', '4', '5']

Tudo isso é considerado pitônico (ok, uma expressão geradora é ainda mais pitônica, mas vamos manter a simplicidade e o tópico)

Ivo van der Wijk
fonte
2

Por exemplo:

lst_points = [[313, 262, 470, 482], [551, 254, 697, 449]]

lst_s_points = [" ".join(map(str, lst)) for lst in lst_points]
print lst_s_points
# ['313 262 470 482', '551 254 697 449']

Quanto a mim, quero adicionar um strantes de cada lista de str:

# here o means class, other four points means coordinate
print ['0 ' + " ".join(map(str, lst)) for lst in lst_points]
# ['0 313 262 470 482', '0 551 254 697 449']

Ou lista única:

lst = [313, 262, 470, 482]
lst_str = [str(i) for i in lst]
print lst_str, ", ".join(lst_str)
# ['313', '262', '470', '482'], 313, 262, 470, 482

lst_str = map(str, lst)
print lst_str, ", ".join(lst_str)
# ['313', '262', '470', '482'], 313, 262, 470, 482
Jayhello
fonte
1

Talvez você não precise de números como strings, basta:

functaulu = [munfunc(arg) for arg in range(loppu)]

Posteriormente, se você precisar como string, poderá fazê-lo com string ou com formato string:

print "Vastaus5 = %s" % functaulu[5]

Tony Veijalainen
fonte
-1

Como é que ninguém parece gostar repr?
python 3.7.2:

>>> int_list = [1, 2, 3, 4, 5]
>>> print(repr(int_list))
[1, 2, 3, 4, 5]
>>> 

Tome cuidado, porém, é uma representação explícita. Um exemplo mostra:

#Print repr(object) backwards
>>> print(repr(int_list)[::-1])
]5 ,4 ,3 ,2 ,1[
>>> 

mais informações em pydocs-repr

Albin Bohlin
fonte