使用生成器填充二维数组中的整数值

时间:2019-02-20 01:37:34

标签: python-3.x

对于在线编程站点,我想使用以下代码(应该不使用map(),因为它提供了有关以下内容的错误:TypeError:“ map”对象无法下标 ):

arr[i][j] = [int(input("Input score").strip().split()[:l]) for j in range(n) for i in range(t)]

代替以下工作版本:

for i in range(t):   
    for j in range(n):
        arr[i][j] = map(int, input("Input score").strip().split())[:l]

,但错误是(假设是)基于提供列表而不是单个值,如下所述:

TypeError:int()参数必须是字符串或数字,而不是'list'

无法通过其他方法找到解决方案,例如在第一步中将rhs(具有所需的解决方案)转换为字符串,然后在第二步中将其分配给lhs;根据需要分配给arr [i] [j]。

P.S。需要使解决方案使用arr的单个和逐行值,例如需要找到值的逐行和,甚至是单个值。以下代码使用逐行的arr值填充总计。

for i in range(t): 
    for j in range(n):
        # Find sum of all scores row-wise 
        sum = 0
        for m in arr[i][j]:
            sum += m
        total[i][j] = sum

2 个答案:

答案 0 :(得分:2)

您可以映射嵌套的for循环:

for i in range(t):   
    for j in range(n):
        arr[i][j] = map(int, input("Input score").strip().split())[:l]

像这样的列表理解:

arr = [map(int, input("Input score").strip().split())[:l] for i in range(t) for j in range(n)]

并且没有map之类的

arr = [[int(k) for k in input("Input score").strip().split())[:l]] 
       for i in range(t) for j in range(n)]

答案 1 :(得分:1)

我们可以如下进行嵌套列表理解:

t = int(input("Input number of tests: ")) 
n = int(input("Input number of rows: "))#.strip().split()) 

total = [[sum([int(i) for i in input("Input score: ").split()]) for j in range(n)] for t_index in range(t)]

print(total)

输入输出对的示例:

Input number of tests: 2
Input number of rows: 3
Input score: 1 2 3
Input score: 2 3 4
Input score: 3 4 5
Input score: 4 5 6
Input score: 5 6 7
Input score: 6 7 8
[[6, 9, 12], [15, 18, 21]]