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?


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

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

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'

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

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


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)


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

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]


-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

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.