Python将'\'转换为'\\'

时间:2011-08-06 17:17:57

标签: python list sorting latex append

我正在编写一个程序来对输入字符串(歌曲名称)进行排序。 这些歌名包含像$ \ lambda $这样的乳胶字符,我想要 得到像'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 个答案:

答案 0 :(得分:6)

  

但出于某种原因,当我添加lambda符号或\her时,它会将其转换为\\her$\\lambda$ ...

不,不。您所看到的是表示,为了清晰起见,它总是将单独的反斜杠加倍。如果你打印实际字符串,你会发现它们没问题。

答案 1 :(得分:2)

代码没有问题:您遇到的是repr行为。打印列表会导致重新打印内容,并repr转义\

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

如果要打印没有repr的列表,可以使用循环或str.join。

答案 2 :(得分:1)

如前所述,你应该逃避反斜杠:

'$\\lambda$'

另一种方法是使用原始字符串,它不受特殊字符替换的影响:

r'$\lambda$'

当你有许多反斜杠时,原始字符串往往更清晰。

答案 3 :(得分:1)

这是预期的行为:因为它显示存储在列表中的字符串,而双斜线表示转义斜杠。如果要查看实际字符串,则应该只打印该字符串,而不是列表。尝试将此行附加到您的程序:

print (' '.join(mlist))

答案 4 :(得分:0)

关键是您应该使用r'$\lambda$'而且在打印列表时打印每个要打印的元素的repr

你应该做

from __future__ import print_function
print (*mlist)