【问题标题】:Python 3: Converting A Tuple To A StringPython 3:将元组转换为字符串
【发布时间】:2012-03-15 06:09:32
【问题描述】:

我有以下代码:

var_one = var_two[var_three-1]
var_one = "string_one" + var_1

我需要对它执行以下操作:

var_four = 'string_two', var_one

但是,这会返回以下错误:

TypeError: Can't convert 'tuple' object to str implicity

我尝试过诸如str(var_one) 和使用strip 之类的方法,但这些都不起作用。 我该怎么做才能达到我要求的结果?

编辑 - 以下是变量包含的内容:

var_one:新变量

var_two: 元组

var_three: 整数

var_four:新的

EDIT2:

程序中出错的行是:os.system(var_four)

【问题讨论】:

  • 我们是否假设var_one 是一个元组?你能给我们一个你的代码的真实例子吗?此链接中的信息有帮助吗? stackoverflow.com/questions/3886669/tuple-to-string
  • 嗯...这些变量是什么?
  • 添加了要质疑的变量。
  • @birryree 如问题中所述,在这种情况下使用 str(var_one) 不起作用。

标签: python string variables python-3.x tuples


【解决方案1】:
one_big_string = ''.join(tuple)   
print one_big_string 

【讨论】:

  • 将代码缩进四个空格以将其放在一个块中,而不是使用内联反引号。
  • @katrielalex - 你不能告诉我如何生活! ;)
【解决方案2】:

你写的很好:

>>> x = 1
>>> y = 1, x
>>> 

问题是在您的代码中的某处else,您使用var_four 作为字符串,而它应该是一个元组。

顺便说一句,我认为像这样在元组周围加上括号更简洁;否则我倾向于认为它们被用于元组拆包。


编辑:有各种各样的方法来连接和格式化字符串——Python 擅长这一点。以某种程度递减的一般性顺序:

"{first_thing} {second_thing}".format(first_thing=var_one, second_thing=var_two)

"{0} {1}".format(var_one, var_two)

var_one + var_two

【讨论】:

  • 我需要 var_four 是一个字符串,这是我的问题。
  • 用导致错误的行更新了问题。
  • @EdenCrow:这不是字符串。您定义它不是一个字符串。这是一个元组。您可以通过多种方式将其转换为字符串,具体取决于您希望它的转换方式。
  • @EdenCrow 看起来你想要"".join(var_four),即你想要连接元素——但是subprocess.Popen 是从 Python 调用外部程序的推荐方式。
  • 那么在变量赋值中使用,会导致它变成一个元组?那么如何将string_twovar_one 加在一起来创建一个字符串?编辑:忍者 - 将看看"".join(var_four)
【解决方案3】:

您的代码看起来不错。

尝试在程序中运行import pdb; pdb.set_trace(),看看是否能找到触发错误的行。

编辑:您需要使用''.join(var_four)var_four 转换为字符串,然后再将其添加到您想要使用的任何内容中。请注意,这实际上会创建一个新字符串,而不是覆盖var_four。见Python 3 string.join() equivalent?

另外,您应该使用subprocess 模块而不是os.system。请参阅Python 3.x documentation

【讨论】:

    【解决方案4】:

    os.system 需要一个将在 shell 中执行的字符串,但你给它的是一个元组。

    假设我们要运行命令rm -rf /home/mike。你可能正在做类似的事情

    binary_and_option = 'rm -rf'
    directory = '/home/mike'
    
    command = binary_and_option, directory # This is the tuple 
                                           #    ('rm -rf', '/home/mike') 
                                           # it is NOT the string 
                                           #     'rm -rf /home/mike'
    
    os.system(command) # this clearly won't work, since it's just 
                       # os.system(('rm -rf', '/home/mike')) 
    

    你想要做的是

    command = "%d %d" % (binary_and_option, directory)
    

    组装字符串。您可能认为逗号将字符串对象与中间的空格组合在一起,但这仅适用于print;这不是字符串的一般工作方式。


    但是等等,还有更多!从不想使用os.system,尤其是当您要构建命令时。它调用 shell(这会引入不必要的安全风险和其他惩罚)并具有不灵活的 API。相反,请使用 subprocess 模块。

    import subprocess 
    
    binary_and_option = ['rm', '-rf']
    directory = '/home/mike'
    
    command = binary_and_option + [directory]
    
    subprocess.call(command)
    

    【讨论】:

      【解决方案5】:
      str(my_tuple)
      

      这似乎太简单了,但这在 Python 3.6 中有效

      >>> x = list(range(100))
      >>> y = list(range(500, 600))
      >>> zip_obj = zip(x, y)
      >>> my_tuple = tuple(zip_obj)
      >>> type(my_tuple)
      >>> <class 'tuple'>
      >>> tuple_str = str(my_tuple)
      >>> tuple_str
      '((0, 500), (1, 501), (2, 502), (3, 503), (4, 504), (5, 505), (6, 506), (7, 507), (8, 508), (9, 509), (10, 510), (11, 511), (12, 512), (13, 513), (14, 514), (15, 515), (16, 516), (17, 517), (18, 518), (19, 519), (20, 520), (21, 521), (22, 522), (23, 523), (24, 524), (25, 525), (26, 526), (27, 527), (28, 528), (29, 529), (30, 530), (31, 531), (32, 532), (33, 533), (34, 534), (35, 535), (36, 536), (37, 537), (38, 538), (39, 539), (40, 540), (41, 541), (42, 542), (43, 543), (44, 544), (45, 545), (46, 546), (47, 547), (48, 548), (49, 549), (50, 550), (51, 551), (52, 552), (53, 553), (54, 554), (55, 555), (56, 556), (57, 557), (58, 558), (59, 559), (60, 560), (61, 561), (62, 562), (63, 563), (64, 564), (65, 565), (66, 566), (67, 567), (68, 568), (69, 569), (70, 570), (71, 571), (72, 572), (73, 573), (74, 574), (75, 575), (76, 576), (77, 577), (78, 578), (79, 579), (80, 580), (81, 581), (82, 582), (83, 583), (84, 584), (85, 585), (86, 586), (87, 587), (88, 588), (89, 589), (90, 590), (91, 591), (92, 592), (93, 593), (94, 594), (95, 595), (96, 596), (97, 597), (98, 598), (99, 599))'
      >>> 
      

      【讨论】:

        猜你喜欢
        • 2013-11-07
        • 2021-05-30
        • 2023-01-10
        • 2022-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-03
        • 2019-07-28
        相关资源
        最近更新 更多