CODE SNIPPET
n = int(raw_input())
a = [[0]*n]*n
for i in xrange(0,n):
s = raw_input()
for j in xrange(0,n):
a[i][j] = int(s[j])
print a
我是python的新手。从stdin获取用户输入时,我在stdin中给出了以下值
3
101
010
101
但是当我打印时,输出为
[[1, 0, 1], [1, 0, 1], [1, 0, 1]]
而输出应为
[[1, 0, 1], [0, 1, 0], [1, 0, 1]]
有人可以指导我,我错过了什么吗?
我正在使用python 2.7。
答案 0 :(得分:0)
将a
更改为:
a = [[0 for i in range(n)] for j in range(n)]
因为[[0]*n]*n
每次都会创建一个实例,所以它会将最后一个赋值给所有实例,因为它们是相同的引用。它们在内存中都是完全相同的列表。当您使用[[0]*n]*n
语法时,您得到的是n个[0]个对象的列表,但它们都是对同一个对象的引用。它们不是不同的实例,而是仅仅引用同一个实例。
答案 1 :(得分:0)
这是有问题的一行:
a = [[0]*n]*n
这违反直觉,只创建[0, 0, 0]
的单个实例,并对其进行三次引用。这意味着每次都会被你的上一次输入覆盖。
你可以通过改写来解决它:
a = [[0 for _ in range(n)] for _ in range(n)]
答案 2 :(得分:0)
首先定义全范围的矩阵,如
a = [[0 for i in range(n] for i in range(n)]
a[i][j] = any value
我希望它的工作
答案 3 :(得分:0)
尝试以下代码。显然你需要添加很多支票。
n_rows = int(raw_input('Enter Number of rows required: '))
n_cols = int(raw_input('Enter Number of cols required: '))
rows = []
for i in range(0, n_rows):
row = int()
final_list = []
for i in xrange(0, n_rows):
s = list(raw_input('Enter the values for row no. {} (Separated by commas): '.format(i+1)))
s_list = [int(i) for i in s if i != ',']
if len(s_list) != n_cols:
raise ValueError('Number of values entered are not correct')
else:
final_list.append(s_list)
print final_list
或者您也可以尝试Numpy模块