【问题标题】:Python converting '\' to '\\'Python 将 '\' 转换为 '\\'
【发布时间】:2011-10-21 13:19:16
【问题描述】:

我正在编写一个程序来对输入字符串(歌曲名称)的列表进行排序。 那些歌曲名包含像 $\lambda$ 这样的乳胶字符,我想 改为像“lambda”一样排序,så 我正在使用应用的能力 排序期间每个元素的函数。像这样:

# -*- 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$,我可以防止这种情况吗?

【问题讨论】:

  • 确保用另一个反斜杠转义反斜杠:'$\\lambda$

标签: python list sorting latex append


【解决方案1】:

如前所述,您应该转义反斜杠:

'$\\lambda$'

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

r'$\lambda$'

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

【讨论】:

  • \l 不是转义序列,'$\lambda$' 产生与r'$\lambda$' 相同的字符串。
  • @Cat Plus Plus:你说得对,我对 ^L 感到困惑。因此,虽然我的建议在类似情况下是明智的,但它并不能回答问题。
【解决方案2】:

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

print (' '.join(mlist))

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 谢谢。现在我对排序/替换有问题。我使用:songs[] = sorted(key=str.replace('$\lambda$', 'lambda')) 但它说替换只得到一个参数......你能帮忙吗?
    • 单独的问题应该作为单独的问题发布。
    【解决方案4】:

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

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

    如果要打印不带repr 的列表,请使用循环或str.join。

    【讨论】:

      【解决方案5】:

      关键是你应该使用r'$\lambda$',而且当你打印列表时它会打印每个元素的repr来打印

      你应该这样做

      from __future__ import print_function
      print (*mlist)
      

      【讨论】:

        猜你喜欢
        • 2020-06-16
        • 2014-05-14
        • 2020-02-15
        • 2013-08-10
        • 2011-09-16
        • 2016-04-27
        • 2018-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多