s
W Pythonie 2.6.5 konstruuję ciąg znaków, który będzie miał różną liczbę %s
tokenów, odpowiadających liczbie wpisów na liście x
. Muszę napisać sformatowany ciąg. Poniższe informacje nie działają, ale wskazują, co próbuję zrobić. W tym przykładzie są trzy %s
tokeny, a lista ma trzy wpisy.
s = '%s BLAH %s FOO %s BAR'
x = ['1', '2', '3']
print s % (x)
Chciałbym, aby ciąg wyjściowy był następujący:
1 BLAH 2 FOO 3 BAR
python
string
list
formatting
string-formatting
SabreWolfy
źródło
źródło
(x)
to to samo cox
. Umieszczenie pojedynczego tokena w nawiasach nie ma znaczenia w Pythonie. Zwykle umieszczasz nawiasy,foo = (bar, )
aby ułatwić czytanie, ale robiszfoo = bar,
dokładnie to samo.print s % (x)
tak napisał OP, właśnie cytuję go / ją.foo = (bar, )
:)(x)
notacji dla jasności; unika również zapominania o nawiasach, jeśli później dodasz dodatkowe zmienne.Powinieneś rzucić okiem na metodę formatowania w Pythonie. Następnie możesz zdefiniować ciąg formatujący w następujący sposób:
źródło
%
operator tylko rozpakowuje krotki.s
bardziej złożona, ponieważ musiałbym uwzględnić rosnące liczby, a nie tylko%s
dla każdej pozycji.s
składa się z wielu różnych etapów, więc o wiele łatwiej jest po prostu dołączyć%s
token.print u'%(blah)d BLAHS %(foo)d FOOS …' % {'blah': 15, 'foo': 4}
.s = '{} BLAH {} BLAH BLAH {} BLAH BLAH BLAH'
Po tej stronie zasobów , jeśli długość x jest różna, możemy użyć:
aby utworzyć uchwyt zastępczy dla każdego elementu z listy
x
. Oto przykład:źródło
Oto jedna wkładka. Mała prowizoryczna odpowiedź wykorzystująca format z print () do iteracji listy.
Co powiesz na to (python 3.x):
Przeczytaj dokumentację dotyczącą używania format () .
źródło
Ponieważ właśnie dowiedziałem się o tej fajnej rzeczy (indeksowanie do list z ciągu formatu), dodaję do tego starego pytania.
Wynik:
Jednak nadal nie wymyśliłem, jak zrobić cięcie (wewnątrz ciągu formatującego
'"{x[2:4]}".format...
) i chciałbym to rozgryźć, jeśli ktoś ma pomysł, jednak podejrzewam, że po prostu nie możesz tego zrobić.źródło
To było zabawne pytanie! Innym sposobem rozwiązania tego problemu w przypadku list o zmiennej długości jest zbudowanie funkcji, która w pełni korzysta z
.format
metody i rozpakowywania list. W poniższym przykładzie nie używam żadnego wymyślnego formatowania, ale można je łatwo zmienić w zależności od potrzeb.źródło
To samo, co odpowiedź @ neobot, ale trochę bardziej nowoczesne i zwięzłe.
źródło
Wynik jest
źródło