我正在编写一个程序来对输入字符串(歌曲名称)进行排序。 这些歌名包含像$ \ 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$
,我可以阻止此吗?
答案 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)