Jaki byłby Twój preferowany sposób konkatenacji ciągów z sekwencji, tak że między każdą dwiema kolejnymi parami dodaje się przecinek. Oznacza to, w jaki sposób mapa, na przykład, ['a', 'b', 'c']
do 'a,b,c'
? (Przypadki ['s']
i []
należy odpowiednio zamapować na 's'
i ''
).
Zwykle używam czegoś podobnego ''.join(map(lambda x: x+',',l))[:-1]
, ale też czuję się trochę niezadowolony.
Dlaczego
map
/lambda
magia? Czy to nie działa?W przypadku, gdy na liście znajdują się liczby, możesz skorzystać ze zrozumienia listy:
lub wyrażenie generatora:
źródło
",".join(l)
nie będzie działać we wszystkich przypadkach. Sugeruję użycie modułu csv z StringIOźródło
StringIO
w Pythonie 3from io import StringIO
in Python 3Oto alternatywne rozwiązanie w Python 3.0, które pozwala na elementy listy nie łańcuchowej:
standardowy sposób
alternatywne rozwiązanie
UWAGA: odstęp po przecinku jest zamierzony.
źródło
Nie chcesz po prostu:
Oczywiście staje się to bardziej skomplikowane, jeśli trzeba podać wartości / przecinki, itp. W takim przypadku proponuję zajrzeć do modułu csv w standardowej bibliotece:
https://docs.python.org/library/csv.html
źródło
@Peter Hoffmann
Korzystanie z wyrażeń generatora ma tę zaletę, że tworzy również iterator, ale oszczędza importowania itertools. Co więcej, rozumienie listy jest zwykle preferowane do mapowania, dlatego spodziewam się, że wyrażenia generatora będą preferowane zamiast imap.
źródło
my_list
może zawierać dowolny rodzaj zmiennych. To pozwala uniknąć wyniku'A,,,D,E'
.źródło
źródło
@ jmanning2k przy użyciu rozumienia listy ma tę wadę, że tworzy nową listę tymczasową. Lepszym rozwiązaniem byłoby użycie itertools.imap, który zwraca iterator
źródło
str.join
pracę szybciejlist
w porównaniu z generatoremOto przykład z listą
Bardziej precyzyjne:-
Przykład 2: -
źródło
Powiedziałbym, że
csv
biblioteka jest jedyną sensowną opcją tutaj, ponieważ została zbudowana, aby poradzić sobie ze wszystkimi przypadkami użycia csv, takimi jak przecinki w ciągu itp.Aby wyświetlić listę
l
do pliku .csv:Możliwe jest również użycie
writer.writerows(iterable)
do wyprowadzenia wielu wierszy do csv.Ten przykład jest zgodny z Python 3, ponieważ użyto tu innej odpowiedzi,
StringIO
którą jest Python 2.źródło
Chyba że coś mi umknie,
','.join(foo)
powinieneś zrobić to, o co prosisz.(edytuj: i jak wskazuje jmanning2k,
jest bezpieczniejszy i dość Pythoński, choć wynikowy ciąg znaków będzie trudny do przeanalizowania, jeśli elementy mogą zawierać przecinki - w tym momencie potrzebujesz pełnej mocy
csv
modułu, jak podkreśla Douglas w swojej odpowiedzi.)źródło
Moje dwa centy. Lubię prostszy kod jednowierszowy w pythonie:
Jest Pythonic, działa na ciągi, liczby, brak i pusty ciąg. Jest krótki i spełnia wymagania. Jeśli lista nie będzie zawierać liczb, możemy użyć tej prostszej odmiany:
Również to rozwiązanie nie tworzy nowej listy, ale używa iteratora, takiego jak wskazał @Peter Hoffmann (dzięki).
źródło