【问题标题】:Python join String with int listPython将字符串与int列表连接起来
【发布时间】:2019-11-22 05:03:14
【问题描述】:

我想要做的是打印输入的倒数。 输入=“1 3 4 2” 输出=“2 4 3 1”

我想知道为什么我的代码会显示这个错误:

if __name__ == "__main__":
    n = 4
    arr = map(int, "1 3 4 2".split())
    ar = list(arr)
    ar.reverse()
    string = ' '
    string.join(ar)
    print(string)

错误: string.join(ar) TypeError: sequence item 0: expected str instance, int found

如果我将 map 参数从 int 更改为 str,它不会显示任何结果。

【问题讨论】:

  • 删除 map(int 部分,它应该可以工作。
  • 使用列表理解而不是 list(map()),嗯。看起来您没有将join 的结果保存在任何地方。
  • 您正在尝试将 int 与字符串连接,最好删除 int
  • arr = map(int, "1 3 4 2".split()) "1 3 4 2" 应该是该格式的输入。我简化了代码并试图理解python。这就是为什么我需要 map() 并将其变成一个列表。

标签: python


【解决方案1】:

你应该使用更简单的方法:

>>> ''.join(reversed('1 2 3 4'))
'4 3 2 1'

【讨论】:

    【解决方案2】:
    n = 4
    arr = map(int, "1 3 4 2".split())
    ar = list(arr)
    b=ar.reverse()
    string =' '
    string=string.join(str(ar))
    print(string)
    

    当您使用带有 int 作为参数的 map 时,您的代码中存在一些错误,字符串被拆分为整数并且连接函数需要字符串

    还有一点,string.join 函数不会改变字符串的值,它只是计算值。如果你想改变你的字符串值,你应该像我提供的代码一样明确分配

    【讨论】:

      【解决方案3】:

      您显然需要加入数字列表。所以与其他人的建议不同,map(int, list) 是正确的。

      有数字的字符串列表的排序与字符串列表的排序不同。

      也就是说,当您排序时,[121,17,11] 将是 [11,17,121]。但是["121","17","11"] 将是["11",121","17"]

      >>> n = 4
      >>> arr = map(int, "1 3 4 2".split())
      >>> ar = list(arr)
      >>> ar.reverse()
      >>> string = ' '
      >>> string.join(ar)
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      TypeError: sequence item 0: expected string, int found
      >>> ar
      [2, 4, 3, 1]
      >>> map(str,ar)
      ['2', '4', '3', '1']
      

      所以你需要将int列表转换回字符串列表然后加入

      >>> string.join(map(str,ar))
      '2 4 3 1'
      >>> print(string)
      

      【讨论】:

      • 只是为了澄清......所以我们不能将 int 列表加入字符串?
      • 您可以扩展 int 和字符串的列表。但是当您想将它们作为单个字符串加入时,您需要将所有整数转换为字符串然后加入。
      【解决方案4】:

      您正在尝试加入一个 int 对象,以使您的代码工作

      你将不得不更换你的 3 行。

      arr = map(str, "1 3 4 2".split())

      【讨论】:

        【解决方案5】:

        使用以下方法加入元素:

        string.join(str(x) for x in ar)
        

        【讨论】:

          【解决方案6】:

          看起来你解决了 int vs str 的初始错误,干得好。 现在,string.join 将返回一个新字符串,而不是修改现有字符串。

          所以

          n = 4 
          arr = map(str, "1 3 4 2".split()) 
          ar = list(arr) 
          ar.reverse() 
          string = ' ' 
          new_string = string.join(ar) 
          print(new_string)
          

          返回

          2 4 3 1
          

          有一些更简洁的方法可以做到这一点。例如

          reversed_str = "".join(reversed("1 3 4 2"))
          print(reversed_str)
          

          【讨论】:

          • 为什么需要map(str 来处理已经是字符串的东西?
          • @lenik 你不知道。我只是使用提供的代码来解释为什么解决方案没有按预期工作。我编辑了答案以添加一种更简洁的方法。看起来你也这样做了
          【解决方案7】:

          在列表中,您可以使用list(reversed(array)) 获得反向列表。 并将列表转换为字符串,您可以这样做: some_str.join(str(x) for x in arr)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-06
            相关资源
            最近更新 更多