1

Я пытаюсь иметь дело со строками, содержащими символы, отличные от ASCII, в Python 2.7. В частности, я хочу, чтобы напечатать элементы списка ниже, чтобы показать их внешнее представление:Как распечатать элементы списка с символами, отличными от ASCII, в функциональном стиле?

foo = "mädchen wörter mutter".split() 

Как это:

>>> for x in foo: 
...  print x 
... 
mädchen 
wörter 
mutter 

Только мне нужно сделать это в функциональном стиле. Но если я пытаюсь следующий, без использования print, это внутреннее представление, которое показано на рисунке:

>>> [x for x in foo] 
['m\xc3\xa4dchen', 'w\xc3\xb6rter', 'mutter'] 

Я попытался с помощью print, как это, но это, очевидно, не работает или как это печатает весь список, а не каждый отдельный элемент:

>>> print [x for x in foo] 
['m\xc3\xa4dchen', 'w\xc3\xb6rter', 'mutter'] 

И размещая print внутри квадратных скобок возвращает ошибку синтаксиса:

>>> [print x for x in foo] 
    File "<stdin>", line 1 
    [print x for x in foo] 
     ^
SyntaxError: invalid syntax 

Затем я попытался использовать функцию, которая будет печатать x: (? Где это происходит из)

>>> def show(x): 
...  print(x) 
... 

>>> [show(x) for x in foo] 
mädchen 
wörter 
mutter 
[None, None, None] 

Этих почти работает, для [None, None, None] в конце исключения.

Есть функциональный способ просто вывести что-то вроде этого:

>>> [*do_something* for x in foo] 
mädchen 
wörter 
mutter 

Спасибо за вашу помощь!

+0

«Есть ли функциональный способ вывести что-то вроде этого?» - Нет. Вы создаете список там, и этот список будет показан. –

+0

Я не знаком с термином «* функциональный стиль *».Что ты имеешь в виду? –

+0

@ Robᵩ Я тоже не честен. Возможно, я должен был сказать «функциональную форму». Меня научили, что '[x for x in foo]' была «функциональной» формой 'for x in foo: x' – LePoufCelebre

ответ

0

Как насчет использования string.join(..)?

print "\n".join(foo) 

Кроме того, обратите внимание, что вы используете называется: list comprehension. И, как правило, списки понятий используются в смысле map - без побочных эффектов. Вызов show(..) на каждых элементах, и отбрасывая результат список понимания не так, как это предполагается будут использоваться ..


This almost works, except for the [None, None, None] at the end (where does that comes from?).

Это происходит от возвращаемого значения списка-понимания. Это show(..)применяется к каждому элементу, а так как функция возвращает None, вы видите 3 None s.


+0

Большое спасибо, что сделал трюк! Я раньше читал сообщение о представлении списка с примерами, которые выглядели немного как мои, но не понимал, что это то, что я здесь делаю. Спасибо за объяснение. – LePoufCelebre

0
def show(x): 
    print(x) 

[show(x) for x in foo] 
mädchen 
wörter 
mutter 
[None, None, None] 

действительно будет работать, если вы напишете его в скрипте. Когда вы пишете это в интерпретаторе, каждый раз, когда вызывается функция, значение печатается, а в конце также печатается список. Список не будет напечатан, если вы напишете тот же код в файле .py.

+0

Я просто попробовал, и это сработало, спасибо. В этом случае мне нужно сделать это с помощью интерпретатора, но это будет полезно знать. – LePoufCelebre