нубский вопрос по питону :)

yolki

есть тупл из целых чисел. t = (1,2,3,4)
как из него получить строку "1,2,3,4" - числа через запятую.
хочется

",".join(t)

однако она жалуется, что там целые числа, а не строки :(

ppplva

','.join([str(n) for n in t])
Или str(t) если лишние пробелы не мешают.

vall

мне ','.join(map(str, t больше нравится

evgarus

Да, так универсальнее, но map тоже list генерит. Это совсем не обязательно, через генератор быстрее будет:
','.join(str(i) for i in t).

psihodog

через map лучше идеологически.
к тому же, в третьем питоне мэп уже делает итератор, как и следовало ожидать:
>>> map(str, range(10
<map object at 0x0000000004802BA8>

Dmitriy82

Идеологически? Что это означает?

psihodog

Я имел ввиду, что через map ближе к человеческому языку, поэтому проще этот код читать и поддерживать:
> map(str, t)
= сделать список, путём применения str к элементам t
> [str(i) for i in t]
= для каждого элемента i из t, применить к i str, и из результатов сделать список
в частности, тут появляется лишняя переменная i.

ppplva

В более сложных случаях, имхо, map хуже:
 ','.join(str(x)+':'+str(y) for (x, y) in d.items
','.join(map(lambda (x, y): str(x)+':'+str(y d.items

  • запись длиннее
  • опять возникли лишние переменные x, y
  • (x, y) определяются далеко от места, где им назначают значения
  • много вложенных скобок

У человеков есть ограничение на число вещей, которые они могут держать в голове одновременно. В данном случае - это глубина вложенности. В отличие от map, код с list comprehension линейный и читается подряд.

psihodog

конечно, я же не говорю, что лист компрехеншн — отстой :)

vall

','.join(map('{0}:{1}'.format, *zip(*d.items
','.join(map('{0}:{1}'.format, d.keys d.values

 :grin:

Dmitriy82

str(t)[1:-1].replace(' ','')

vall

фу

sergeikozyr

code:
str(t)[1:-1].replace(' ','')
как-то по-перловому это выглядит :grin:
Оставить комментарий
Имя или ник:
Комментарий: