用转义字符打印Python字符串列表?

时间:2017-08-13 14:24:37

标签: python python-3.x list

我有一个列表变量,其中包含一个字符串。出于某种原因,它的打印方式如下:

print('Value = ' + str(var))

输出:

Value = [\'123456789\']

似乎这些是str函数添加的转义引号,但我不知道如何摆脱它们。

编辑:对不起,感到困惑。这是更完整的背景故事:

我正在撰写聊天分析应用。这是我的Message类:

class Message:
    def __init__(self, name, text, likers):
        self.name = name
        self.text = text
        self.likers = likers

    def __str__(self):
        return 'Message: ' + self.name + ' said "' + self.text + '", liked by ' + str(self.likers)

这是存储消息的地方:

message = data['response']['messages'][i]

user_id = message['user_id']
name = message['name']  # Sender
text = re.sub(r'\W+', ' ', str(message['text']))
likers = message['favorited_by']

msg = Message(name, text, likers)

users[user_id].messages.append(msg)

上面,data是从聊天服务器返回的JSON。 i是循环消息的变量(以20块为单位接收)。 users是一个将用户ID映射到User对象(我的其他类)的字典。由于多个用户都可以浏览每条消息,因此likers是一个用户ID数组。

当我尝试打印消息时出现问题。测试代码:

print([str(x) for x in users[user_names['MyUser']].messages])

user_names是一个将用户名映射到用户ID的字典)

该代码打印:

['Message: MyUser said "all of you", liked by [\'25843278\']', 'Message: MyUser said "why?", liked by [\'25843278\']']

1 个答案:

答案 0 :(得分:0)

在您的代码中,likers是一个字符串列表。

likers = ['25843278']

如果您使用str,Python会将此列表转换为字符串,如下所示:

text = str(likers)
print(repr(text))
# -> "['25843278']"

因此,您的__str__方法将返回带单引号的字符串。

此外,您还可以创建一个消息列表:

[str(x) for x in users[user_names['MyUser']].messages]

Python将打印此列表。它会将每个项目转换为其字符串表示形式。所以它将逃避每个喜欢的单引号。

为避免这种情况,您可以自己将喜欢的列表转换为字符串,如下所示:

def __str__(self):
    return ('Message: ' + self.name + ' said "' + self.text + '",
            liked by ' + ', '.join(self.likers))