Итак, у меня есть список:
['x', 3, 'b']
И я хочу, чтобы результат был:
[x, 3, b]
Как я могу сделать это в Python?
Если я это сделаю str(['x', 3, 'b']), я получу один с цитатами, но мне не нужны цитаты.
Ответы:
В Python 2:
mylist = ['x', 3, 'b']
print '[%s]' % ', '.join(map(str, mylist))
В Python 3 (где printэто встроенная функция, а не функция синтаксиса):
mylist = ['x', 3, 'b']
print('[%s]' % ', '.join(map(str, mylist)))
Оба возвращаются:
[x, 3, b]
Это использует map()функцию для вызова str для каждого элемента mylist , создавая новый список строк, который затем объединяется в одну строку с помощью str.join(). Затем %оператор форматирования строки подставляет строку вместо %sin "[%s]".
mapфункцию для вызова strкаждого элемента mylist, создавая новый список строк, который затем объединяет в одну строку str.join. Затем он использует %оператор форматирования строки, чтобы подставить строку вместо %sin "[%s]".
"[{0}]".format(", ".join(str(i) for i in mylist))
map(f, xs)(или imapв python2.x) (f(x) for x in xs)когда fэто предопределенный вызываемый объект; который имеет тенденцию выполнять меньше байт-кодов и обычно более компактен. Конечно, не map(lambda x:..., xs) намного хуже, чем(... for x in xs)
Это простой код, поэтому, если вы новичок, вам будет достаточно легко понять его.
mylist = ["x", 3, "b"]
for items in mylist:
print(items)
Все они печатаются без кавычек, как вы и хотели.
Если вы используете Python3:
print('[',end='');print(*L, sep=', ', end='');print(']')
print(end='['); print(*l, sep=', ', end=']\n')
Вместо использования mapя бы рекомендовал использовать выражение генератора с возможностью joinпринимать итератор:
def get_nice_string(list_or_iterator):
return "[" + ", ".join( str(x) for x in list_or_iterator) + "]"
Здесь joinфункция-член строкового класса str. Она принимает один аргумент: список (или итератор) строк, а затем возвращает новую строку со всеми элементами сцепленных с помощью, в этом случае ,.
", ".join( str(x) for x in list_or_iterator).join('[]')
Вы можете удалить все нежелательные символы из строки, используя ее translate()метод с аргументом Nonefor, tableза которым следует строка, содержащая символ (символы), которые вы хотите удалить в качестве deletecharsаргумента.
lst = ['x', 3, 'b']
print str(lst).translate(None, "'")
# [x, 3, b]
Если вы используете версию Python до 2.6, вам нужно будет вместо этого использовать функцию stringмодуля, translate()потому что возможность передачи Noneв качестве tableаргумента не была добавлена до Python 2.6. Использование это выглядит так:
import string
print string.translate(str(lst), None, "'")
Использование string.translate()функции также будет работать в 2.6+, поэтому использование ее может быть предпочтительнее.
lst = ["it isn't", 3, 'b']==> ["it isnt", 3, b]а также сlst = ['it isn\'t', 3, 'b']
Вот интерактивный сеанс, показывающий некоторые шаги однострочника @ TokenMacGuy. Сначала он использует mapфункцию для преобразования каждого элемента в списке в строку (фактически, он создает новый список, а не преобразовывает элементы в старом списке). Затем он использует строковый метод joinдля объединения этих строк ', 'между собой. Остальное - это просто форматирование строки, что довольно просто. (Изменить: этот пример прост; форматирование строк в целом может быть несколько сложным.)
Обратите внимание, что использование join- это простой и эффективный способ создания строки из нескольких подстрок, гораздо более эффективный, чем выполнение этого путем последовательного добавления строк к строкам, что включает в себя много скрытого копирования.
>>> mylist = ['x', 3, 'b']
>>> m = map(str, mylist)
>>> m
['x', '3', 'b']
>>> j = ', '.join(m)
>>> j
'x, 3, b'
Используется .formatдля форматирования строк,
mylist = ['x', 3, 'b']
print("[{0}]".format(', '.join(map(str, mylist))))
Вывод:
[x, 3, b]
Пояснение:
map используется для сопоставления каждого элемента списка с string типом., разделителем as.[и ]в операторе печати, чтобы показать фигурные скобки списка..formatсамый питонический способ. Но, конечно, я принимаю разногласия. ;)
@AniMenon вдохновил меня написать более общее решение для питона.
mylist = ['x', 3, 'b']
print('[{}]'.format(', '.join(map('{}'.format, mylist))))
Он использует только formatметод. Никаких следов str, и это позволяет тонкую настройку формата элементов. Например, если у вас есть числа с плавающей запятой в качестве элементов списка, вы можете настроить их формат, добавив спецификатор преобразования, в данном случае:.2f
mylist = [1.8493849, -6.329323, 4000.21222111]
print("[{}]".format(', '.join(map('{:.2f}'.format, mylist))))
Вывод вполне приличный:
[1.85, -6.33, 4000.21]
print(["Sam"])вызовыrepr("Sam"), которые возвращаются'Sam'(с кавычками), в отличие от тех, когда вы вызываетеprint("Sam")и вызовы python,str("Sam")которые возвращаютсяSam(без кавычек). См. Разницу междуstrиreprили Pythonstrиlists для получения дополнительной информации.