【问题标题】:How to unstring a list/tuple without eval [duplicate]如何在没有 eval 的情况下解开列表/元组的字符串 [重复]
【发布时间】:2015-12-12 23:11:47
【问题描述】:

我正在尝试使用input 来获取元组的值。但是,由于input 将值设置为字符串,我也尝试unstring 它。我发现 eval 可以用于此目的,但它应该是 distrusted. 虽然只要我私下使用代码就不会成为问题,如果我要公开发布它,我想使用最好的代码可能。

那么,在 Python 3 中是否有另一种方法可以解开 tuple 的字符串?

这是我目前正在做的事情:

>>> a = input("What is the value? ")
What is the value? (3,4)
>>> a
'(3,4)'
>>> eval(a)
(3, 4)

【问题讨论】:

  • 您可以尝试获取两个值(我假设您想要一个元组,而不是 N 元组),例如 a, b = map(int, input().split()),其中 ab 用空格分隔。
  • 为什么不让用户输入一些更简单的东西,比如不带括号的3, 4
  • @101 因为此代码将用于笛卡尔坐标(其中很多)。我发现将坐标组合在一起更容易。 :)

标签: python string python-3.x


【解决方案1】:

使用安全版本的 eval,ast.literal_eval,它专为您想要实现的目标而设计:

from ast import literal_eval
tup = literal_eval(a)

【讨论】:

    【解决方案2】:

    我会这样做:

    >>> inp = input()
    '(3,4)'
    >>> tuple(map(int, inp.strip()[1:-1].split(',')))
    (3, 4)
    

    strip 将确保前导或尾随空格不会破坏您的一天。

    【讨论】:

    • 非常感谢!我继续并接受了@Padraic Cunningham 的答案,因为它更简单并且也可以使用列表(我需要),但我会记住你的答案以供将来的代码使用。
    【解决方案3】:

    简单,你不要求用户输入一个元组。相反,您可以这样做:

    x = input("Enter x value: ")
    y = input("Enter y value: ")
    
    data = (
        int(x),
        int(y)
    )
    
    print( 
        repr(data)
    )
    
    --output:--
    (10, 3)
    

    【讨论】:

    • 这不适用于我的代码——它基于欧几里得几何,并且有很多笛卡尔坐标,我发现它们更容易组合在一起。还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 2017-09-13
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多