Чтобы объяснить, почему список не печатается «должным образом», print(["Sam"])вызовы repr("Sam"), которые возвращаются 'Sam'(с кавычками), в отличие от тех, когда вы вызываете print("Sam")и вызовы python, str("Sam")которые возвращаются Sam(без кавычек). См. Разницу между strиrepr или Python strи lists для получения дополнительной информации.
Это использует map()функцию для вызова str для каждого элемента mylist , создавая новый список строк, который затем объединяется в одну строку с помощью str.join(). Затем %оператор форматирования строки подставляет строку вместо %sin "[%s]".
Спасибо, что отлично работает. Не могли бы вы подробнее объяснить, что вы делаете во второй строке? Я новичок в питоне.
Obaid
19
Он использует mapфункцию для вызова strкаждого элемента mylist, создавая новый список строк, который затем объединяет в одну строку str.join. Затем он использует %оператор форматирования строки, чтобы подставить строку вместо %sin "[%s]".
li.davidm
6
Другой способ сделать это, возможно, немного более современный: "[{0}]".format(", ".join(str(i) for i in mylist))
Джек О'Коннор
2
я предпочитаю map(f, xs)(или imapв python2.x) (f(x) for x in xs)когда fэто предопределенный вызываемый объект; который имеет тенденцию выполнять меньше байт-кодов и обычно более компактен. Конечно, неmap(lambda x:..., xs) намного хуже, чем(... for x in xs)
SingleNegationElimination
1
@ user1767754: правда? Ссылка на сайт?
SingleNegationElimination
18
Это простой код, поэтому, если вы новичок, вам будет достаточно легко понять его.
mylist =["x",3,"b"]for items in mylist:print(items)
Меня это смущает. Фильтрует ли как-то список длинный тип данных?
dval
Более сжатая версия была быprint(end='['); print(*l, sep=', ', end=']\n')
Anonymous
9
Вместо использования mapя бы рекомендовал использовать выражение генератора с возможностью joinпринимать итератор:
def get_nice_string(list_or_iterator):return"["+", ".join( str(x)for x in list_or_iterator)+"]"
Здесь joinфункция-член строкового класса str. Она принимает один аргумент: список (или итератор) строк, а затем возвращает новую строку со всеми элементами сцепленных с помощью, в этом случае ,.
Хорошая оптимизация для Python 2, так как map возвращает список в 2.x. Он возвращает генератор в 3.x, так что там он не так сильно помогает.
Tom Zych
7
Я бы вернулся", ".join( str(x) for x in list_or_iterator).join('[]')
Eyquem
@eyquem: Умно, я не видел раньше, чтобы такое соединение использовалось. Тем не менее, это немного более непонятно для новичка (поскольку вы используете свойство, что строка является итеративным контейнером односимвольных строк).
Сет Джонсон,
6
Вы можете удалить все нежелательные символы из строки, используя ее translate()метод с аргументом Nonefor, tableза которым следует строка, содержащая символ (символы), которые вы хотите удалить в качестве deletecharsаргумента.
Если вы используете версию Python до 2.6, вам нужно будет вместо этого использовать функцию stringмодуля, translate()потому что возможность передачи Noneв качестве tableаргумента не была добавлена до Python 2.6. Использование это выглядит так:
@eyquem: Да, чтобы избежать удаления символов, которые на самом деле являются частью ваших данных (а не строго используются для их разграничения), естественно, потребуется немного более сложная / другая логика, если это возможно.
Мартино
3
Вот интерактивный сеанс, показывающий некоторые шаги однострочника @ TokenMacGuy. Сначала он использует mapфункцию для преобразования каждого элемента в списке в строку (фактически, он создает новый список, а не преобразовывает элементы в старом списке). Затем он использует строковый метод joinдля объединения этих строк ', 'между собой. Остальное - это просто форматирование строки, что довольно просто. (Изменить: этот пример прост; форматирование строк в целом может быть несколько сложным.)
Обратите внимание, что использование join- это простой и эффективный способ создания строки из нескольких подстрок, гораздо более эффективный, чем выполнение этого путем последовательного добавления строк к строкам, что включает в себя много скрытого копирования.
>>> mylist =['x',3,'b']>>> m = map(str, mylist)>>> m
['x','3','b']>>> j =', '.join(m)>>> j
'x, 3, b'
Он использует только formatметод. Никаких следов str, и это позволяет тонкую настройку формата элементов. Например, если у вас есть числа с плавающей запятой в качестве элементов списка, вы можете настроить их формат, добавив спецификатор преобразования, в данном случае:.2f
print(["Sam"])
вызовыrepr("Sam")
, которые возвращаются'Sam'
(с кавычками), в отличие от тех, когда вы вызываетеprint("Sam")
и вызовы python,str("Sam")
которые возвращаютсяSam
(без кавычек). См. Разницу междуstr
иrepr
или Pythonstr
иlist
s для получения дополнительной информации.Ответы:
В Python 2:
В Python 3 (где
print
это встроенная функция, а не функция синтаксиса):Оба возвращаются:
Это использует
map()
функцию для вызова str для каждого элемента mylist , создавая новый список строк, который затем объединяется в одну строку с помощьюstr.join()
. Затем%
оператор форматирования строки подставляет строку вместо%s
in"[%s]"
.источник
map
функцию для вызоваstr
каждого элементаmylist
, создавая новый список строк, который затем объединяет в одну строкуstr.join
. Затем он использует%
оператор форматирования строки, чтобы подставить строку вместо%s
in"[%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)
Это простой код, поэтому, если вы новичок, вам будет достаточно легко понять его.
Все они печатаются без кавычек, как вы и хотели.
источник
Использование только печати:
источник
Если вы используете Python3:
источник
print(end='['); print(*l, sep=', ', end=']\n')
Вместо использования
map
я бы рекомендовал использовать выражение генератора с возможностьюjoin
принимать итератор:Здесь
join
функция-член строкового классаstr
. Она принимает один аргумент: список (или итератор) строк, а затем возвращает новую строку со всеми элементами сцепленных с помощью, в этом случае,
.источник
", ".join( str(x) for x in list_or_iterator).join('[]')
Вы можете удалить все нежелательные символы из строки, используя ее
translate()
метод с аргументомNone
for,table
за которым следует строка, содержащая символ (символы), которые вы хотите удалить в качествеdeletechars
аргумента.Если вы используете версию Python до 2.6, вам нужно будет вместо этого использовать функцию
string
модуля,translate()
потому что возможность передачиNone
в качествеtable
аргумента не была добавлена до Python 2.6. Использование это выглядит так:Использование
string.translate()
функции также будет работать в 2.6+, поэтому использование ее может быть предпочтительнее.источник
lst = ["it isn't", 3, 'b']
==>["it isnt", 3, b]
а также сlst = ['it isn\'t', 3, 'b']
Вот интерактивный сеанс, показывающий некоторые шаги однострочника @ TokenMacGuy. Сначала он использует
map
функцию для преобразования каждого элемента в списке в строку (фактически, он создает новый список, а не преобразовывает элементы в старом списке). Затем он использует строковый методjoin
для объединения этих строк', '
между собой. Остальное - это просто форматирование строки, что довольно просто. (Изменить: этот пример прост; форматирование строк в целом может быть несколько сложным.)Обратите внимание, что использование
join
- это простой и эффективный способ создания строки из нескольких подстрок, гораздо более эффективный, чем выполнение этого путем последовательного добавления строк к строкам, что включает в себя много скрытого копирования.источник
Используется
.format
для форматирования строк,Вывод:
Пояснение:
map
используется для сопоставления каждого элемента списка сstring
типом.,
разделителем as.[
и]
в операторе печати, чтобы показать фигурные скобки списка.Ссылка:
.format
для форматирования строк PEP-3101источник
.format
самый питонический способ. Но, конечно, я принимаю разногласия. ;)@AniMenon вдохновил меня написать более общее решение для питона.
Он использует только
format
метод. Никаких следовstr
, и это позволяет тонкую настройку формата элементов. Например, если у вас есть числа с плавающей запятой в качестве элементов списка, вы можете настроить их формат, добавив спецификатор преобразования, в данном случае:.2f
Вывод вполне приличный:
источник