есть ли мудрец, эквивалентный php 'implode' для списка?

Я хотел бы взять список, например

L = [1,2,3,4]

и вывести строку, например

string = L.join('::') для вывода 1::2::3::4

я могу легко запустить цикл, например

string='';

for a in L: string = string+'::'+str(a)

но я хотел бы сделать все это в одной строке, так как я передаю эту команду в php-скрипт, который запускает команду exec, и, похоже, он ломается с разрывами строк и отступами, таким образом ... я хотел бы написать это в одну строку или выяснить как передать его как переменную php для выполнения оболочки
спасибо


person userX    schedule 22.10.2014    source источник
comment
я передаю эту команду в php-скрипт, который запускает команду exec это звучит как ужасная идея - у кого-то есть огромные возможности злоупотреблять чем-то подобным.   -  person Gareth Latty    schedule 22.10.2014
comment
спасибо @Lattyware, я ценю вашу помощь, это именно то, что мне было нужно. но не могли бы вы немного рассказать об опасностях этой идеи, пожалуйста. просто чтобы уточнить, что это не php-скрипт, доступный для изменения конечными пользователями.   -  person userX    schedule 22.10.2014
comment
Если вы передаете что-то, для чего затем используете exec, им не нужно это редактировать, они могут просто каким-то образом поместить в строку выражение, которое делает что-то злонамеренное, и внезапно они могут выполнить произвольный код. Этот тип внедрения является действительно распространенным вектором атаки — всегда есть лучшие способы сделать что-то.   -  person Gareth Latty    schedule 22.10.2014


Ответы (2)


Что-то вроде этого

'::'.join(map(str,L))

или вместо карты

'::'.join(str(i) for i in L)
person Luka Rahne    schedule 22.10.2014

Вы ищете str.join():

>>> "::".join(str(x) for x in [1, 2, 3, 4])
1::2::3::4

Поскольку str.join() требует строк, здесь я использую выражение генератора для создания строк из чисел в оригинальный список.

Метод существует в строке, отражая метод str.split(). Это также означает, что он работает с произвольными итерируемыми объектами, а не только со списками.

person Gareth Latty    schedule 22.10.2014