在 Python 中,如何在列表中包含单个反斜杠元素?

In Python, how do I have a single backslash element in a list?

首先,我 运行 Python 3.6 windows 10.

python 中的反斜杠字符是一个特殊字符,用作字符串的 "escape"。因此,它不能直接打印。如果我想打印单个反斜杠,这样做是行不通的:

print("\") #error message

解决这个问题的方法是简单地添加另一个反斜杠,如下所示:

print("\") #\

到目前为止一切顺利。但是,当您制作字符串元素列表时,如下所示:

list_of_strings = ['<','>','\u20AC','\u00A3','$','\u00A5','\u00A4','\']
print(list_of_strings)

打印出以下内容: ['<', '>', '€', '£', '$', '¥', '¤', '\\'] 这并不理想。尝试在字符串中仅使用一个反斜杠 ('\') 将导致与开头提到的相同的 EOL 错误。 如果您尝试使用其 unicode (u005C) 的单个实例直接打印出反斜杠,如下所示:

print(['<','>','\u20AC','\u00A3','$','\u00A5','\u00A4','\u005C'])

输出仍然有一个双斜线: ['<', '>', '€', '£', '$', '¥', '¤', '\\']

我试过的另一件事是:

bs = "\"
print(bs) #prints a single \
list_of_strings = ['a','b','c','d',bs]
print(list_of_strings) #prints ['a', 'b', 'c', 'd', '\']

有没有办法让我能够设置它,以便在列表中将单个反斜杠作为字符串元素打印出来?

感谢您能给我的任何帮助!

是的,输出总是有双斜杠,因为字符串对象就是这样表示单斜杠的。当您打印列表时,列表 __str____repr__ 方法使用对象 __repr__ 方法来构建正在打印的内容。

但是如果你 print(list_of_strings[-1]) 你会看到,它是一个单斜杠。为什么这很重要?这里的关键是理解源代码字符串字面值之间的区别,一个对象表示的方式,以及字符串对象的实际值是什么。

如果实在嫌麻烦,自己写一个打印列表的函数:

>>> list_of_strings = ['<','>','\u20AC','\u00A3','$','\u00A5','\u00A4','\']
>>> def print_list(l):
...     innards = ','.join(l)
...     print(f'[{innards}]')
...
>>> print_list(list_of_strings)
[<,>,€,£,$,¥,¤,\]
>>>

直接打印一个list对象应该主要用于调试。每当您需要某种特定的输出格式时,您应该自己处理。

双反斜杠是正确的做法。看起来它正在打印出 2 个反斜杠,因此您可以 copy/paste 将其放入另一个脚本中。如果您输入 print(list_of_strings[-1],您将只会看到 1 个反斜杠。这里其实没有问题。

在 python 中打印列表时,会在后台调用 repr() 方法。这意味着 print(list_of_strings) 本质上是相同的东西(除了换行符):

>>> for element in list_of_strings:
...     print(element.__repr__())
... 
'<'
'>'
'€'
'£'
'$'
'¥'
'¤'
'\'

实际上存储的字符串是'\',只是表示为'\\'

>>> for element in list_of_strings:
...     print(element)
... 
<
>
€
£
$
¥
¤
\

如果您像上面那样单独打印每个元素,它会显示文字值而不是表示值。

出于某种原因,在列表中反斜杠“\”显示为双斜杠:

list_elements = []
string1 = "\ string 1"
list_elements.append(string1)
print(list_elements)

>> ['\ string 1']

但是当你访问列表的元素时,它带有一个反斜杠:

print(list_elements[0])

>> \ string 1

所以,如果你需要使用每个元素,你不会有任何问题。