Python конвертирует '\' в '\\' - PullRequest
       30

Python конвертирует '\' в '\\'

0 голосов
/ 06 августа 2011

Я пишу программу для сортировки списка входных строк (названий песен). Эти названия песен содержат латексные символы, такие как $ \ lambda $, которые я хочу вместо того, чтобы сортироваться как «лямбда», я использую возможность применить функция для каждого элемента во время сортировки. как это:

# -*- coding: UTF8 -*-
def conv( inp ):
    if inp == '$\lambda$':
        return 'lambda'
    else:
        return inp

mlist = []
mlist.append('martin')
mlist.append('jenny')
mlist.append('åse')
mlist.append('$\lambda$')
mlist.append('lambda')
mlist.append('\her')
print (mlist)
mlist = sorted(mlist, key=conv(str.lower))
print (mlist)

Но по какой-то причине, когда я добавляю знак lambda или \her, он преобразует его в \\her или $\\lambda$, могу ли я предотвратить это?

Ответы [ 5 ]

6 голосов
/ 06 августа 2011

Но по какой-то причине, когда я добавляю знак lambda или \her, он преобразуется в \\her или $\\lambda$ ...

Нет, это не такт.То, что вы видите, это представление , которое всегда удваивает одиночные обратные слэши для ясности.Если вы напечатаете фактические строки, вместо этого вы увидите, что они в порядке.

2 голосов
/ 06 августа 2011

В коде нет ничего плохого: вы испытываете repr поведение.Печать списка приводит к повторному созданию его содержимого, и repr экранирует \.

print repr(r'\foo') # => '\\foo'

Если вы хотите напечатать список без repr, вы используете либо цикл, либо str.присоединиться.

1 голос
/ 06 августа 2011

Это ожидаемое поведение: оно отображает строку, хранящуюся в списке, а двойная косая черта означает экранированную косую черту. Если вы хотите увидеть фактическую строку, вы должны просто напечатать эту строку, а не список. Попробуйте добавить эту строку в вашу программу:

print (' '.join(mlist))
1 голос
/ 06 августа 2011

Как уже предлагалось, вам следует избегать обратной косой черты:

'$\\lambda$'

Другой альтернативой является использование необработанных строк, которые не подлежат замене специальными символами:

r'$\lambda$'

Когда у вас много обратных слэшей, необработанные строки имеют тенденцию быть более четкими.

0 голосов
/ 06 августа 2011

Дело в том, что вы должны использовать r'$\lambda$', более того, когда вы печатаете список, он печатает репр каждого элемента для печати

вы должны сделать

from __future__ import print_function
print (*mlist)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...