从python

时间:2017-02-23 18:07:47

标签: python string integer

我目前正在使用python进行编码,但我遇到了问题; 我有一个名为data的字符串和三个整数(a,b,c)。

data = "{1,2,3}"
a = 0
b = 0
c = 0

我想从数据变量中获取数字,并将它们放入a,b,c中,如下所示:

data = "{1,2,3}"
a = 1
b = 2
c = 3

我该怎么做?

2 个答案:

答案 0 :(得分:2)

{1,2,3}是有效的Python代码。不幸的是,在评估时,它会为您提供一个没有订单的set。评估字符串'{1,2,3}',我们最终会得到{3,1,2}。但我们可以为括号切换那些花括号,我们得到(1,2,3) tuple!元组保持秩序。更好的是我们可以通过分配解压缩它们:

>>> import ast
>>> data = "{1,2,3}"
>>> data = data.replace('{','(').replace('}',')') # make it look like a tuple
>>> data_as_tuple = ast.literal_eval(data) # safe "eval".  don't do: eval(data)  
>>> a, b, c =  data_as_tuple # unpack tuple via assignment
>>> a
1
>>> b
2
>>> c
3

注意:您可能不需要变量名称abc。如果您需要引入10个而不是3个,该怎么办?你需要再写七个变量名吗?如果abc都代表相同类型的内容,那么最好将它们留作tuplelist。然后,您可以为集合创建一个名称,而不必担心为集合中的每个项目指定名称。然后,如果您需要对使用迭代的项目采取措施:

for item in data_as_tuple:
    print(item*3) # or whatever

对于downvoters:

初学者通常缺乏搜索答案时使用的术语。如果您不知道将文本分成多个部分称为拆分字符串,您会搜索什么?如果你从未听说过正则表达式,你会如何使用它来绊倒答案?如果您不知道文本可以作为代码进行评估,您将如何进入ast.literal_eval

此外,似乎OP尚未在集合中思考,只是变量名称=>值。如果OP想要将数据提取到列表中,那么他的代码将更加健壮,因为他可以处理不同大小的集合。

无论如何,很难解决所有这些问题。如果问题非常简单,我就把OP扔掉了。我认为有动力的学生会在遇到概念时收集这些概念。

就个人而言,我在回答没有付出努力的家庭作业问题时画了一条线。这些问题的不同之处在于OP几乎总有多个子问题可以尝试解决。

答案 1 :(得分:0)

您可以使用几种方法。鉴于您描述的数据格式,我建议采取以下步骤:

  1. 删除无关的大括号(Customer.new(customer_params) def customer_params params.require(:customer).permit(<list of attributes you want to allow>) end
  2. 将字符串拆分为逗号分隔的部分。
  3. 将这些作品转换为数字。
  4. 您可以在python的一行中执行此操作:

    {}

    或者将其分解为步骤:

    >>> [int(x) for x in '{1,2,3}'[1:-1].split(',')]
    [1, 2, 3]
    

    希望有所帮助。