我正在努力将字符串转换为元组,而不会在过程中拆分字符串的字符。有人可以建议一个简单的方法来做到这一点。需要一个班轮。
失败
a = 'Quattro TT'
print tuple(a)
作品
a = ['Quattro TT']
print tuple(a)
由于我的输入是一个字符串,我通过将字符串转换为列表来尝试下面的代码,该列表再次将字符串拆分为字符..
失败
a = 'Quattro TT'
print tuple(list(a))
预期输出:
('Quattro TT')
生成输出:
('Q', 'u', 'a', 't', 't', 'r', 'o', ' ', 'T', 'T')
答案 0 :(得分:56)
你可以(a,)
。无需使用功能。 (请注意,逗号是必要的。)
基本上,tuple(a)
表示创建a
的内容的元组,而不是仅由a
本身组成的元组。字符串的“内容”(迭代它时得到的)是它的字符,这就是它被分割成字符的原因。
答案 1 :(得分:16)
一个特殊的问题是构造包含0或1个项目的元组:语法有一些额外的怪癖来适应这些。空元组由一对空括号构成;通过使用逗号跟随值来构造具有一个项目的元组(仅在括号中包含单个值是不够的)。丑陋但有效。例如:
>>> empty = () >>> singleton = 'hello', # <-- note trailing comma >>> len(empty) 0 >>> len(singleton) 1 >>> singleton ('hello',)
如果只在字符串对象周围放置一对括号,它们只会将该表达式转换为parenthesized expression(强调添加):
带括号的表达式列表产生表达式列表产生的任何内容:如果列表包含至少一个逗号,则产生一个元组;否则,它会产生构成表达式列表的单个表达式。
一对空括号产生一个空元组对象。由于元组是不可变的,所以文法规则适用(即,两次出现的空元组可能会或可能不会产生相同的对象)。
请注意,元组不是由括号组成的,而是使用逗号运算符。异常是空元组,需要括号 - 允许表达式中没有“无”的字符串引起歧义并允许常见的拼写错误传递。
那是(假设Python 2.7),
a = 'Quattro TT'
print tuple(a) # <-- you create a tuple from a sequence
# (which is a string)
print tuple([a]) # <-- you create a tuple from a sequence
# (which is a list containing a string)
print tuple(list(a)) # <-- you create a tuple from a sequence
# (which you create from a string)
print (a,) # <-- you create a tuple containing the string
print (a) # <-- it's just the string wrapped in parentheses
输出符合预期:
('Q', 'u', 'a', 't', 't', 'r', 'o', ' ', 'T', 'T')
('Quattro TT',)
('Q', 'u', 'a', 't', 't', 'r', 'o', ' ', 'T', 'T')
('Quattro TT',)
Quattro TT
在print语句中添加一些注释。当您尝试在Python 2.7中创建单个元素元组作为print语句的一部分时(如在print (a,)
中),您需要使用带括号的表单,因为print a,
的尾随逗号否则将被视为print语句的一部分,从而导致从输出中抑制换行而不是创建元组:
最后写一个'\ n'字符,除非print语句以逗号结尾。
在Python 3.x中,上述示例中的大多数用法实际上会引发SyntaxError
,因为在Python 3中print
turns into a function(您需要添加一对额外的括号) 。
但特别是这可能会引起混淆:
print (a,) # <-- this prints a tuple containing `a` in Python 2.x
# but only `a` in Python 3.x
答案 2 :(得分:5)
以防有人来到这里试图知道如何创建一个元组,将字符串“Quattro”和“TT”的每个部分分配给列表中的元素,它就像这样
print tuple(a.split())
答案 3 :(得分:4)
我使用此函数将字符串转换为元组
import ast
def parse_tuple(string):
try:
s = ast.literal_eval(str(string))
if type(s) == tuple:
return s
return
except:
return
用法
parse_tuple('("A","B","C",)') # Result: ('A', 'B', 'C')
在你的情况下,你做
value = parse_tuple("('%s',)" % a)
答案 4 :(得分:1)
您可以使用以下解决方案:
s="jack"
tup=tuple(s.split(" "))
output=('jack')
答案 5 :(得分:1)
您可以使用file1.xml
file2.xml
etc
eval()
答案 6 :(得分:0)
子类化元组,其中一些子类实例可能需要是单字符串实例,这会引发一些有趣的事情。
class Sequence( tuple ):
def __init__( self, *args ):
# initialisation...
self.instances = []
def __new__( cls, *args ):
for arg in args:
assert isinstance( arg, unicode ), '# arg %s not unicode' % ( arg, )
if len( args ) == 1:
seq = super( Sequence, cls ).__new__( cls, ( args[ 0 ], ) )
else:
seq = super( Sequence, cls ).__new__( cls, args )
print( '# END new Sequence len %d' % ( len( seq ), ))
return seq
我从这个帖子中学到的东西,你必须把逗号放在args[ 0 ]
之后。
打印行显示单个字符串不会被拆分。
注意,子类构造函数中的逗号现在变为可选:
Sequence( u'silly' )
或
Sequence( u'silly', )
答案 7 :(得分:0)
请参阅:
'Quattro TT'
是一个字符串。
由于字符串是字符列表,因此与
相同['Q', 'u', 'a', 't', 't', 'r', 'o', ' ', 'T', 'T']
现在...
['Quattro TT']
是一个列表,列表的第一个位置是字符串。
还...
a = 'Quattro TT'
list(a)
是一个字符串,已转换为列表。
同样,由于字符串是一个字符列表,因此变化不大。
其他信息...
tuple(something)
这会将某些内容转换为元组。
了解所有这些情况,我认为您可以得出结论,一切都没有失败。
答案 8 :(得分:-1)
这仅涵盖一个简单的案例:
a = ‘Quattro TT’
print tuple(a)
如果你只使用','这样的分隔符,那么它可以工作。
我使用configparser
中的字符串,如此:
list_users = (‘test1’, ‘test2’, ‘test3’)
and the i get from file
tmp = config_ob.get(section_name, option_name)
>>>”(‘test1’, ‘test2’, ‘test3’)”
在这种情况下,上述解决方案不起作用。但是,这确实有效:
def fot_tuple(self, some_str):
# (‘test1’, ‘test2’, ‘test3’)
some_str = some_str.replace(‘(‘, ”)
# ‘test1’, ‘test2’, ‘test3’)
some_str = some_str.replace(‘)’, ”)
# ‘test1’, ‘test2’, ‘test3’
some_str = some_str.replace(“‘, ‘”, ‘,’)
# ‘test1,test2,test3’
some_str = some_str.replace(“‘”, ‘,’)
# test1,test2,test3
# and now i could convert to tuple
return tuple(item for item in some_str.split(‘,’) if item.strip())
答案 9 :(得分:-1)
val_1=input("").strip(")(").split(",") #making a list from the string
if val_1[0].isdigit()==True: #checks if your contents are all integers
val_2 = []
for i in val_1:
val_2.append(int(i))
val_2 = tuple(val_2)
print(val_2)
else: # if the contents in your tuple are of string, tis case is applied
val_2=[]
for i in range(0,len(val_1)):
if i==0:
val_2.append(val_1[i][1:-1])
else:
val_2.append(val_1[i][2:-1])
val_2=tuple(val_2)
print(val_2)