Dołącz listę różnych typów jako ciąg znaków w Pythonie

292

Muszę dołączyć do listy przedmiotów. Wiele pozycji na liście to wartości całkowite zwrócone przez funkcję; to znaczy,

myList.append(munfunc()) 

Jak przekonwertować zwrócony wynik na ciąg, aby dołączyć go do listy?

Czy muszę wykonać następujące czynności dla każdej wartości całkowitej:

myList.append(str(myfunc()))

Czy istnieje bardziej Pythoniczny sposób rozwiązywania problemów z rzucaniem?

AKM
źródło
3
Upewnij się, że używasz dobrej gramatyki, aby ludzie mogli zrozumieć, o co pytasz i / lub ponownie przeczytać twoje pytanie przed opublikowaniem.
allyourcode

Odpowiedzi:

537

Wywołanie str(...)to Pythoński sposób przekonwertowania czegoś na ciąg.

Możesz zastanowić się, dlaczego chcesz listę ciągów. Zamiast tego możesz zachować go jako listę liczb całkowitych i konwertować liczby całkowite na ciągi tylko wtedy, gdy chcesz je wyświetlić. Na przykład, jeśli masz listę liczb całkowitych, możesz je przekonwertować jeden po drugim w pętli for i połączyć je za pomocą ,:

print(','.join(str(x) for x in list_of_ints))
Mark Byers
źródło
175

Nie ma nic złego w przekazywaniu liczb całkowitych do str. Jednym z powodów, dla których możesz tego nie zrobić, jest to, że myList naprawdę powinna być listą liczb całkowitych, np. Rozsądne byłoby zsumowanie wartości na liście. W takim przypadku nie przekazuj int do str przed dołączeniem ich do myList. Jeśli ostatecznie nie przekształcisz się w łańcuchy przed dołączeniem, możesz zbudować jeden duży łańcuch, wykonując coś podobnego

', '.join(map(str, myList))
cały kod
źródło
36
Prawdopodobnie angielski nie jest jego ojczystym językiem. Nie masz pewności, czy chce dołączyć do listy przedmiotów, na które konwertuje str? Proszę rozważyć możliwość dodania rozmytej logiki do parsera ;-)
John Machin
3
@John Rozważyłem to, ale jeśli on jest dobry w języku angielskim, chciałem delikatnie popchnąć go, aby podniósł poziom angielskiego na SO do normalnego poziomu. Myślę, że moja odpowiedź zawiera różne interpretacje i sytuacje, w których może się znaleźć.
allyourcode
41

można użyć funkcji map w pythonie. Wymaga dwóch argumentów. Pierwszy argument to funkcja, która musi być użyta dla każdego elementu listy. Drugi argument jest iterowalny .

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

Po konwersji listy do łańcucha można użyć prosty dołączyć funkcję do listy połączyć w jeden ciąg

a = map(str, a)    
''.join(a)      
'123'
Prakash N.
źródło
10
a=[1,2,3]
b=[str(x) for x in a]
print b

powyższa metoda jest najłatwiejszym i najbardziej ogólnym sposobem konwersji listy na ciąg znaków. inną krótką metodą jest-

a=[1,2,3]
b=map(str,a)
print b
Prateek Verma
źródło
4

Można to zrobić na trzy sposoby.

powiedzmy, że masz listę 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))

Jednak, jak stwierdzono w przykładzie timeit na stronie Pythona pod adresem https://docs.python.org/2/library/timeit.html korzystanie z mapy jest szybsze. Więc poleciłbym ci użycie"-".join(map(str, my_list))

Thomas Turner
źródło
2

Twój problem jest raczej jasny. Być może szukasz rozszerzenia, aby dodać wszystkie elementy innej listy do istniejącej listy:

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

Jeśli chcesz przekonwertować liczby całkowite na ciągi, użyj str () lub interpolacji ciągów, ewentualnie w połączeniu ze zrozumieniem listy, tj.

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

Wszystko to jest uważane za pytoniczne (ok, wyrażenie generatora jest jeszcze bardziej pytoniczne, ale bądźmy proste i na temat)

Ivo van der Wijk
źródło
2

Na przykład:

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

Jeśli chodzi o mnie, chcę dodać listę strprzed każdą 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']

Lub pojedyncza lista:

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
źródło
1

Może nie potrzebujesz liczb jako ciągów, po prostu zrób:

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

Później, jeśli potrzebujesz go jako łańcucha, możesz to zrobić za pomocą łańcucha lub formatu łańcucha:

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

Tony Veijalainen
źródło
-1

Dlaczego nikt nie wydaje się lubić repr?
python 3.7.2:

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

Uważaj jednak, jest to wyraźna reprezentacja. Przykład pokazuje:

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

więcej informacji na pydocs-repr

Albin Bohlin
źródło