我有一个列表变量,其中包含一个字符串。出于某种原因,它的打印方式如下:
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\']']
答案 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))