如何将我的列表输出转换为python中的int输出

时间:2014-12-30 12:13:35

标签: python

import random
n=int(input("Enter the limit of your matrix:"))
a=[[random.random()for i in range(n)],[random.random()for j in range(n)]]
for i in range(0,n):
    for j in range(0,n):
        a[i][j]=int(input("Enter the element:"))
sumr=0
sumc=0
for i in range(0,n):
    sumr+=a[i]
for j in range(0,n):
    for i in range(0,n):
        sumc+=a[j][i]

此程序显示属性错误,该列表无法添加到int项目中。 帮我纠正它。 还建议进行更正

6 个答案:

答案 0 :(得分:4)

a[i]是一个列表(代表代码中的一行)。

您无法添加列表和int,您应该:

sumr += sum(a[i])

sum会将a[i]列表中的元素总和作为int返回,现在您的计算结果正常。

答案 1 :(得分:2)

而不是

for i in range(0,n):
    sumr+=a[i]

简单写一下

sumr = sum(a[i] for i in range(0, n))

a[i]是一个列表。您无法直接向int添加列表,即使它是int的列表。相反,您可以将sum() list int int添加到{{1}}。

答案 2 :(得分:2)

$ python test.py 
Enter the limit of your matrix:3
Enter the element:1
Enter the element:2
Enter the element:3
Enter the element:1
Enter the element:2
Enter the element:3
Enter the element:1
Traceback (most recent call last):
  File "test.py", line 209, in <module>
    a[i][j]=int(input("Enter the element:"))
IndexError: list index out of range

您的代码适用于2 * 2矩阵,因为您只有两行。

a=[[random.random()for i in range(n)],[random.random()for j in range(n)]]

以下是3 * 3矩阵的输出: -

[[0.9632434262652646, 0.7470504655963679, 0.2750109619917276], [0.7032133906246875, 0.16200573351318048, 0.09565026547688305]]

克服上述问题,请参阅以下代码: ALGO /步骤:

  1. 获取矩阵限制n * n
  2. 创建n * n
  3. 的矩阵
  4. 通过lambda,map和sum函数得到所有行和列的总和。
  5. 无需随意方法。
  6. 代码:

    n = int(raw_input("Enter the limit of your matrix:"))
    a = []
    tmp = [0 for k in range(n)]
    for i in range(0,n):
        a.append(list(tmp))
        for j in range(0,n):
            a[i][j] = int(input("Enter the element:"))
    
    sumr = sum(map(lambda x:sum(x), a))
    sumc = 0
    for j in range(0,n):
        sumc +=sum(map(lambda x:x[j], a))
    
    print sumr
    print sumc
    

    输出:

    Enter the limit of your matrix:3
    Enter the element:1
    Enter the element:2
    Enter the element:3
    Enter the element:1
    Enter the element:2
    Enter the element:3
    Enter the element:1
    Enter the element:2
    Enter the element:3
    18
    18
    

答案 3 :(得分:0)

  1. 获取矩阵限制n * n
  2. 创建n * n
  3. 的矩阵
  4. 通过lambda,map和sum函数得到所有行和列的总和。
  5. 无需随意方法。
  6. &GT;

    n = int(raw_input("Enter the limit of your matrix:"))
    a = []
    tmp = [0 for k in range(n)]
    for i in range(0,n):
        a.append(list(tmp))
        for j in range(0,n):
            a[i][j] = int(input("Enter the element:"))
    
    sumr = sum(map(lambda x:sum(x), a))
    sumc = 0
    for j in range(0,n):
        sumc +=sum(map(lambda x:x[j], a))
    
    print sumr
    print sumc
    

    输出: -

    Enter the limit of your matrix:3
    Enter the element:1
    Enter the element:2
    Enter the element:3
    Enter the element:1
    Enter the element:2
    Enter the element:3
    Enter the element:1
    Enter the element:2
    Enter the element:3
    18
    18
    

答案 4 :(得分:0)

我对你的问题做了一些假设,这是一个在输入元素后打印行和列总和的解决方案。此外,您一直在尝试将列表添加到整数,这导致了该错误。

请注意,我们不需要random()来初始化列表,因此我已将其替换。我稍微重构了你的代码并编写了有用的评论。

n = input("Enter the limit of your matrix:") # no need to cast input to int
a = [[0 for x in xrange(n)] for x in xrange(n)]
for i in xrange(n):    # range(n) or xrange(n) start from 0 by default
    for j in xrange(n):
        a[i][j]=int(input("Enter the element:"))
sumr = []
sumc = [0 for x in xrange(n)]

for i in xrange(n):
    sumr.append(sum(a[i]))
    for j in xrange(n):
        sumc[j] += a[i][j]

print "sum of rows: ", sumr
print "sum of columns", sumc

这适用于任何索引。另外,代码中的sumrsumc,如果它们与我猜的相同,那么最终会得到相同的值,但这里有所不同。

以下是一个例子:

~ python test.py
Enter the limit of your matrix:3
Enter the element:1
Enter the element:2
Enter the element:3
Enter the element:1
Enter the element:2
Enter the element:4
Enter the element:1
Enter the element:5
Enter the element:6
sum of rows:  [6, 7, 12]
sum of columns [3, 9, 13]

此外,请参阅此链接以获取有关how to initialize multi-dimensional lists的更多信息,以及有关difference between xrange and range的一些信息,尽管在此示例中它不会产生太大影响。

答案 5 :(得分:0)

第3行和第6行中的代码存在冲突(直观)。

a=[[random.random()for i in range(n)],[random.random()for j in range(n)]]

不会在每个列表中创建包含n个元素的n个列表(我在这里猜测,看起来就像你需要的那样)这一个做到了:

a=[[random.random() for i in range(n)] for j in range(n)]]

导致错误的部分是:

sumr=0
sumc=0
for i in range(0,n):
    sumr+=a[i]

sumr属于<type 'int'>,但a[i]len = n的列表,+=运算符会在那里引发错误。

如果您想要行总和,可以尝试:

sumr = [sum(row) for row in a]        # sum of rows
sumc = [sum(col) for col in zip(*a)]  # sum of columns

对于更简单的代码,您必须使用numpy.arraynumpy.sum

a = numpy.array(a)
sumr = numpy.sum(a, 1)
sumc = numpy.sum(a, 0)