【问题标题】:Convert list of strings into tuple of integers将字符串列表转换为整数元组
【发布时间】:2021-05-15 22:33:40
【问题描述】:

我需要将包含 2 个项目的字符串(用逗号分隔)转换为整数。还需要将列表列表切换为元组的元组。

来自:

[['0,0'], ['0,1'], ['1,-1'], ['1,0']]

到:

((0,0), (0,1), (1,-1), (1,0))

我该怎么做?

谢谢。

【问题讨论】:

    标签: python string list integer tuples


    【解决方案1】:

    您可以将 map 和 tuple 与列表理解混合使用:

    x = [['0,0'], ['0,1'], ['1,-1'], ['1,0']]
    x = tuple([tuple(map(int, elt[0].split(','))) for elt in x])
    print(x)
    

    输出:

    ((0, 0), (0, 1), (1, -1), (1, 0))
    

    解释:map 用于将元素转换为intsplit 的输出上,这是内部列表的元素。 tuple 用于根据需要将类型转换为tuple

    【讨论】:

    • 为什么大家都在使用高级解决方案?显然 OP 是 Python 的新手。
    【解决方案2】:

    您可以使用标准的“累加器模式”:

    # Initialize an accumulator
    outer_tuple = tuple()
    
    for inner_list in outer_list:
        a, b = inner_list[0].split(",")
        a, b = int(a), int(b)
        outer_tuple += ((a, b),)
    

    首先,inner_list[0] 给出内部列表中的字符串,例如:"0,1"。接下来,.split(",") 将该字符串拆分为逗号字符,从而生成一个字符串列表:["0", "1"]。然后,a, b = ... 将列表“解包”为变量ab。最后,我们将ab 转换为int 并将其作为元组元组 添加到outer_tuple(我们的累加器)。

    我们需要做((a, b),)的原因是因为当你添加两个元组时,你实际上只是在做一个联合,或者换句话说,你从两个元组中获取元素并创建一个新的元组元素:

    >>> x = (1, 2)
    >>> y = (3, 4)
    >>> x + y
    (1, 2, 3, 4)
    

    但这不是我们想要的。我们想要一个元组的元组。看看会发生什么:

    >>> x += y
    >>> x
    (1, 2, 3, 4)
    >>> x += ((5, 6),)
    >>> x
    (1, 2, 3, 4, (5, 6))
    

    【讨论】:

    • 请注意,此代码仅在输入为 OP 中给出的形式时才有效。如果您想要一个由 3 元组、4 元组等组成的元组,则可以使用更通用的解决方案。
    【解决方案3】:

    一个简单的方法:

    >>> tmp = tuple(eval(str(li).replace('\'', '')))
    >>> ans = (tuple(tmp[i]) for i in range(4))
    >>> ans
    <generator object <genexpr> at 0x000001754697D8C8>
    >>> tuple(ans)
    ((0, 0), (0, 1), (1, -1), (1, 0))
    

    【讨论】:

      【解决方案4】:

      希望这会有所帮助:

      首先,我们将为输出创建一个列表,然后我们将遍历输入列表中的每个元素,然后对其创建一个元组版本,元组版本将通过用逗号分割字符串然后使用map 函数获取一个元组版本,该版本将具有 int 类型而不是字符串。然后将其附加到输出列表。最后将输出列表转换为元组。

      inputGiven = [['0,0'], ['0,1'], ['1,-1'], ['1,0']]
      outputGivenInList = []
      for i in inputGiven:
          tupledVersion = tuple(map(int, i[0].split(",")))
          outputGivenInList.append(tupledVersion)
      finalOutput = tuple(outputGivenInList)
      print(finalOutput)
      
      

      【讨论】:

      • 仅供参考,Python 传统上是使用 snake_case 编写的,而不是 camelCase。
      • 感谢您提供的信息,我不知道这个事实。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多