【问题标题】:list comprehension - how to map strings as integers?列表理解 - 如何将字符串映射为整数?
【发布时间】:2021-04-10 14:22:24
【问题描述】:

我有一个简单的任务是创建一个平方大小为 n 的矩阵,例如通过对角线我有一串零,然后用 +1 向外增长数字。我这样做已经达到了结果:

def abs(num):
    if num >= 0:
        return num
    else:
        return -num
    
n = int(input())

matrix = [[f'{abs(x-y)}' for y in range(n)] for x in range (n)]

for n in range(n):
    map(int, matrix[n])
    print(matrix[n])

达到这样的结果:

['0', '1', '2', '3', '4']
['1', '0', '1', '2', '3']
['2', '1', '0', '1', '2']
['3', '2', '1', '0', '1']
['4', '3', '2', '1', '0']

但是我需要去掉撇号,所以我的结果如下所示:

[0, 1, 2, 3, 4]
[1, 0, 1, 2, 3]
[2, 1, 0, 1, 2]
[3, 2, 1, 0, 1]
[4, 3, 2, 1, 0]

我读到 python 将我的结果解释为字符串,而不是整数,这就是问题所在,但我试图根除问题但没有成功。任何人都可以发现我在哪里犯了错误?

【问题讨论】:

  • 如果这不是你想要的,你为什么要明确地使用额外的代码创建字符串?
  • @Mureinik 的答案是正确的,但我还想提一下 map() 返回一个新列表,您不会在任何地方分配该列表。它没有改变它的论点。
  • 您使用 map 将 int 应用于每一行,然后......因为您不使用它而丢弃该输入。如果你想用 map 来解决问题,那就是matrix[n] = list(map(int, matrix[n]))。但当然@Mureinik 的答案是要走的路。
  • @joanis int(input()) 和带括号的print 表明他们使用的是 Python 3,而不是 Python 2。
  • @joanis 在 Python 3 中它返回一个迭代器而不是一个列表。

标签: python string list numbers


【解决方案1】:

您不应该在字符串中格式化计算。删除字符串格式,你应该没问题:

matrix = [[abs(x-y) for y in range(n)] for x in range (n)]

旁注:Python 有一个内置的abs 函数,你不需要重新实现它。

【讨论】:

    【解决方案2】:

    首先,您将值显式转换为字符串,因此您不应该这样做

    matrix = [[abs(x-y) for y in range(n)] for x in range (n)]
    
    for n in range(n):
        print(matrix[n])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-14
      • 2021-08-15
      • 2019-06-14
      • 2021-05-10
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2023-01-28
      相关资源
      最近更新 更多