为什么python中的tuple()函数返回很多括号

需要明确的是,我正在尝试将元组转换为字符串,然后将字符串转换回元组,而无需进行任何更改,例如额外的括号。


当我使用这个


#Creates and prints an tuple

tuple_list = (480L, 640L, 3L)

print tuple_list

它打印 (480L, 640L, 3L)


但是当我使用


#Converts the tuple to string and then prints the tuple form of the string

stri = str(tuple_list)

print tuple([stri])

它打印 ('(480L, 640L, 3L)',)


为什么不打印这个(480L, 640L, 3L),我如何让它打印这个?


catspeake
浏览 250回答 3
3回答

千巷猫影

然后就这样做:`print(stri)`稍后将此字符串转换为元组,您必须像这样使用模块文字 eval :from ast import literal_evalprint(literal_eval(stri))

至尊宝的传说

这一行:print tuple_list将元组转换为字符串表示并将其显示在屏幕上。(480L, 640L, 3L)如果您打印字符串文字“(400”,如下所示:print "(400"那么您将看到(480屏幕上。同样,元组的字符串表示(480L, 640L, 3L)是 string "(480L, 640L, 3L)"。这一行:stri = str(tuple_list)还创建 的字符串表示(480L, 640L, 3L)并将其存储在变量中stri。如果那时您这样做,print stri您将获得与原始输出相同的输出。但是你的代码会这样做:print tuple([stri])这在一行中完成了三件事。首先,它创建一个包含一个元素的列表[stri]。然后它调用tuple()which 将 1-element 列表转换为 1-element tuple (stri,)。最后,它调用printwhich 将您的 1 元素元组转换为该元组的字符串表示形式:"('(480L, 640L, 3L)',)"并打印它。这回答了你问题的第一部分。很明显,您希望stri = str(tuple_list)做一些与它不同的事情。但是从您的问题中不清楚您期望什么输出。问题是“(480L, 640L, 3L):我如何让它打印这个?” 但你已经知道答案了,因为这是print tuple_list你的问题所说的输出。那么你真正期望的输出是什么?

哈士奇WWW

这个:stri = str(tuple_list)print tuple([stri])首先创建 的字符串表示tuple_list,然后创建一个包含该字符串作为单个元素的列表,然后tuple从该列表构建一个(与单个元素具有相同的字符串),最后打印该元组的表示。如果你把它分解,这是这样做的(print在每个步骤中添加语句以使事情更清楚):stri = str(tuple_list)print("stri: '{}'".format(repr(stri)))lst = [stri]print("lst: '{}'".format(repr(lst)))tup = tuple(lst)print("tup: '{}'".format(repr(tup)))print(tup)我需要元组形式,但是如果我尝试将其转换回来,就会出现这个问题。ast.literal_eval()那么你想要:>>> import ast>>> tup = ("a", "b", "c")>>> stri = str(tup)>>> stri"('a', 'b', 'c')">>> result = ast.literal_eval(stri)>>> result('a', 'b', 'c')注意:请注意,这仅适用于包含文字常量的元组。附带说明:在print用于检查对象时,请使用print repr(obj),而不是print obj,以便您获得对象的正确内部表示。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python